-3

我正在阅读这本书Windows 系统编程。第二章有一个程序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 = 2,但是argc == 3

我想不出在什么情况下iFirstFile == argc?我无法理解其背后的逻辑。谁能解释一下这部分?

4

2 回答 2

4

就像评论中所说的那样,如果 argv 中没有文件名,则 Options() 返回 argc。所以这是你想要 cat 标准输入而不是文件的情况。

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

例如“cat > x”从标准输入读取。“foo | cat | bar”也是如此。在每种情况下,Options() 都会返回 argc;

于 2013-09-10T15:49:03.347 回答
1

如果您使用以下命令运行程序:

cat

然后argc == 1iFirstFile == 1。因此,if语句条件为真,它将使用stdinand运行stdout,允许使用管道或交互式输入,或输出到终端窗口。

于 2013-09-10T15:51:45.137 回答