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
なぜそうなのか?