-2

是使用 popen 的好处只是读取命令产生的输出,或者 popen 比系统有更多的好处或优势。

考虑以下两个程序:

方案一:

#include <stdio.h>

int main()
{
    FILE *more,*who;

    if (!(more = popen("more", "w")))
    {
            printf("Command `more` not found!");
            return -1;
    }
    if (!(who = popen("who", "r")))
    {
            printf("Command `who` not found!");
            return -1;
    }

    while (!feof(who))
    {
            char buffer[100];
            if (fgets(buffer, 100, who) != NULL)
            {
                    fputs(buffer, more);
            }
    }

    fclose(more);
    fclose(who);
  return 0;
 }

方案二:

#include <unistd.h>
int main()
{
    system("who|more");
    return 0;
}

如果我可以在一行中做与Program2中相同的事情,我为什么要使用Program1

4

1 回答 1

4

您作为示例提供的两个程序并不等效。 popen为您提供一对文件句柄,您可以使用它们以交互方式在正在运行的进程的标准输入/标准输出中读取和写入输入和输出。该system调用只是执行该操作并将当前进程的标准输入重定向到被调用子进程的标准输入,并将该进程的标准输出重定向到当前(主机)进程的标准输出。

一般来说,这取决于您要达到的目标。如果您的目标只是运行命令,则system可以正常工作。如果您有兴趣以编程方式读取其输出并对其进行处理(并可能生成更多输入),那么popen效果会更好。

于 2013-05-07T05:56:06.720 回答