0

私のメインが行うことになっているのは、システムコールを使用して標準入力から読み取ることです。または、ファイル引数が指定されている場合は、ファイル引数を開きます。これは、1 つのファイル引数から読み取るようにコーディング済みです。しかし、今では複数のファイル引数から開く必要があり、これを行う方法に関するロジックが不足しています。コードで複数のファイル引数を開くことができるようにするにはどうすればよいですか?

int main(int argc, char *argv[]) {
    char *file_pathname = NULL;
    int fd;
    char file_buffer[540];

    //Check for proper number of arguments:
    if(argc < 2) {
        exit(2);
    }

    if(argc < 3) {
        file_pathname = "stdin";
    }

    file_pathname = argv[2];   

    if(argc < 3) {
        ((fd = read(STDIN_FILENO,file_buffer, FILE_BUFFER_SIZE)));
    }
    // FILE argument given, so try to open it:
    if (argc == 3) {
        if ((fd = open(file_pathname,O_RDONLY)) == -1) {
            perror("ERROR OPENING FILE");
            return 2;
        }
4

2 に答える 2

1

プログラムをLinux(POSIX互換)システムでのみ実行したい場合は、興味があります

man 3 getopt

これは、短い UNIX スタイルでコマンド ライン引数を解析するのに役立つ関数です。たとえば、次のようになります。

myprog -a 5654 -f -n ~/Test/input.txt

長いオプションを解析したい場合は、 getopt_long() と getopt_long_only() もあります。

特定の引数パーサー (これはお勧めしません) が必要な場合は、ライブラリとして実装できます。

glib または gtk を使用している場合は、glib パーサーがあります。または、qt プロジェクトがある場合は、qxt (拡張 Qt ライブラリ) のパーサー。または、必要に応じて、より軽量なクロスプラットフォームの引数パーサーをグーグルで検索できます。

于 2013-03-20T03:11:31.547 に答える
0

ファイル記述子を取得し、必要なことを行う関数から始めます。

void do_stuff(int fd);

ファイル名で同じことを行う別のものを追加します。

void do_stuff_fname(const char *fname);  /* Open fname and call do_stuff */

ここで、次のmainいずれかを呼び出す必要があります。

if (argc < 2) {
    do_stuff(STDIN_FILENO);
} else {
    int i;
    for (i=1; i<argc; i++) do_stuff_fname(argv[i]);
}

JustAnotherCurious が提案しgetoptたように、を使用してこれを改善できます

于 2013-09-26T21:48:16.887 に答える