在limits.h中定义的常量“PIPE_BUF”究竟是如何在linux中工作的。当我在系统调用“read(int fd, void *buf, size_t count);”中将它用作“count”时 ,系统是否调用“读取”,一次返回一个字节并等待它到达文件末尾?下面的代码采用两个命令“last”和“sort”并进行两个 popen 调用。像 ~$foo last sort 在下面的代码中,我不明白为什么如果读取只返回一次所有可用字节,那么 while 循环是必要的。而且,对popen的写入如何理解所有输入都已收到,现在是popen执行程序的时候了。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <signal.h>
#include <fcntl.h>
#include <errno.h>
#include <limits.h>
int main (int argc, char* argv[])
{
FILE *fin, *fout;
char buffer[PIPE_BUF];
int n;
if (argc < 3)
{
printf("Need two parameters.\n");
exit(1);
}
fin=popen(argv[1], "r");
fout=popen(argv[2],"w");
fflush(fout);
while ((n=read(fileno(fin), buffer, PIPE_BUF)) > 0)
{
write(fileno(fout), buffer, n);
}
pclose(fin);
pclose(fout);
return 0;
}