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 되는건가요?