将 system() 的标准输出通过管道传输到其他 system() 的标准输入
Pipe stdout of system() to stdin of other system()
我想学习如何在 C 中使用管道,并尝试做一些基本的事情,例如在 shell 中克隆 |
的行为。
这是我的第一次尝试:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(void)
{
FILE *stdin_tmp;
stdin_tmp = stdin;
stdin = stdout;
system("cat /tmp/test.txt");
system("less");
stdin = stdin_tmp;
return 0;
}
这就是我想做的(写在shell):
cat /tmp/test.txt |less
行为显然不是我所期望的。 less
没有收到 cat
的输出。
如何正确完成?
试试 popen()
函数。
这是它的原型:
FILE *popen(const char *command, const char *type);
下面是正确的使用方法:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int ch;
FILE *input;
FILE *output;
input = popen("cat /tmp/test.txt", "r");
output = popen("less", "w");
if (!input || !output)
return EXIT_FAILURE;
while( (ch = fgetc(input)) != EOF )
fputc(ch, output);
pclose(input);
pclose(output);
return 0;
}
我想学习如何在 C 中使用管道,并尝试做一些基本的事情,例如在 shell 中克隆 |
的行为。
这是我的第一次尝试:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(void)
{
FILE *stdin_tmp;
stdin_tmp = stdin;
stdin = stdout;
system("cat /tmp/test.txt");
system("less");
stdin = stdin_tmp;
return 0;
}
这就是我想做的(写在shell):
cat /tmp/test.txt |less
行为显然不是我所期望的。 less
没有收到 cat
的输出。
如何正确完成?
试试 popen()
函数。
这是它的原型:
FILE *popen(const char *command, const char *type);
下面是正确的使用方法:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int ch;
FILE *input;
FILE *output;
input = popen("cat /tmp/test.txt", "r");
output = popen("less", "w");
if (!input || !output)
return EXIT_FAILURE;
while( (ch = fgetc(input)) != EOF )
fputc(ch, output);
pclose(input);
pclose(output);
return 0;
}