我写了一段代码来了解IPC和读、写功能的基础。由于读取功能是阻塞的,读取将等待数据被其他进程写入管道的另一端。我在父进程中的 write() 之前进行了睡眠调用。在 read() 之前和之后的子进程中,我已经打印了时间。
#include <stdio.h>
int main()
{
int fd[2], err, pid;
FILE *fp;
char *buf;
buf = malloc(12);
fp = fopen("BE1.txt","w");
err = pipe(fd);
if(err == -1)
printf("Error while creating pipe");
pid = fork();
if(pid == -1)
printf("Error while creating process");
if(pid == 0)
{
fprintf(fp,"before read %s\n", __TIME__);
// fflush(fp);
read(fd[0], buf, 12);
fprintf(fp,"%s\n", buf);
// fflush(fp);
fprintf(fp,"after read %s\n", __TIME__);
}
else
{
sleep(50);
write(fd[1], "this is it", 12);
}
fclose(fp);
return 0;
}
由于 read 处于阻塞模式,子进程应该在上面的代码中打印不同的时间。但它的打印时间与
输出:
before read 19:48:16
this is it
after read 19:48:16
为什么会这样?