- 论坛徽章:
- 0
|
小弟写了两个程序来实验popen, 父进程写入数据, 子进程读取数据.
父进程
========================================
#include <stdio.h>
int main (void)
{
FILE *fp = NULL;
fp = popen ("./child_reader", "w");
fprintf (fp,"Hello world\n");
fflush(fp);
sleep(10);
return 0;
}
子进程
========================================
#include <stdio.h>
#include <unistd.h>
int main (void)
{
char buf[128] = { 0, };
#if 0
size_t byte_read = 0;
byte_read = fread (buf, sizeof(buf), 1, stdin);
buf[byte_read] = '\0';
printf ("I am child %s\n", buf);
#else
int byte_read = 0;
byte_read = read (STDIN_FILENO, buf, sizeof(buf));
buf[byte_read] = '\0';
printf ("I am child %s\n", buf);
#endif
return 0;
}
子进程用read 和 fread 读取管道的数据时候出现了不同的现象.
用read读取的时候, 子进程马上就打出了数据.
而用fread读取的时候, 子进程在fread阻塞直到父进程, 没有打印出父进程写入的数据.
我现在的知识没办法解释这个现象. |
|