https://pdos.csail.mit.edu/6.S081/2022/labs/util.html
여기서 pingpong 예제 풀었습니다.
#include "kernel/types.h"
#include "kernel/stat.h"
#include "user/user.h"
int main(){
int p[2];
char recv[5];
int pid;
pipe(p);
pid = fork();
if(pid == 0){ //child
read(p[0],recv,4);
close(p[0]);
printf("%d: received %s\n",getpid(), recv);
write(p[1],"pong",4);
close(p[1]);
}
else{
write(p[1],"ping",4);
close(p[1]);
read(p[0],recv,4);
close(p[0]);
printf("%d: received %s\n",getpid(), recv);
}
exit(0);
}
정상적으로 작동은 하는데 이렇게 코드 짜면 parent가 먼저 write 한 뒤에 child가 read 한다는 보장이 없지 않나요?
아니면 파이프에 정보가 안 들어온걸 인식해서 무조건 write 이후에 read 되는건가요?
파이프가 블럭방식이라 read가 충분한 양의 데이터를 못읽으면 리턴을 안하고 무작정 기다려서 괜찮을듯 child가 먼저 read 호출해도 데이터 없으면 어차피 기다리니
감사합니당