-3

Windows System Programmingという本を読んでいます。第二章には、プログラムがありCat.cます。catLinuxのコマンドを実装しています。コードはhttp://pastebin.com/wwQFp599です

これが私を混乱させる部分です:

/*      iFirstFile is the argv [] index of the first input file. */
iFirstFile = Options (argc, argv, _T("s"), &dashS, NULL);

if (iFirstFile == argc) { /* No files in arg list. */
        CatFile (hStdIn, hStdOut);
        return 0;
} 

コメントiFirstFileで述べたように、最初の入力ファイルのargv []インデックスです。

それは、もし私が試してみたら、しかしcat -s abc.txt、という意味です。iFirstFile = 2argc == 3

私はどのような状況で考えられないのiFirstFile == argcですか?その背後にあるロジックを理解できません。誰か私にこの部分を説明してもらえますか?

4

2 に答える 2

4

コメントにあるように、argv にファイル名がない場合、Options() は argc を返します。したがって、これは、ファイルではなく stdin を cat したい場合です。

if (iFirstFile == argc) { /* No files in arg list. */
        CatFile (hStdIn, hStdOut);
        return 0;
} 

たとえば、「cat > x」は stdin から読み取ります。「foo | cat | bar」も同様です。これらのケースのそれぞれで、Options() は argc を返します。

于 2013-09-10T15:49:03.347 に答える