block | non-block 내부동작
예를 들어 1에서 write를 100만큼 출력버퍼에 썼다고 하고
2의 입력버퍼의 크기가 50이라고 하고
2에서 read로 최대 100만큼 받는다고 했을 때.
1.block일 경우는 write함수는 언제까지 block되는 건가요? 출력 버퍼에 100만큼 쓸 때까지?
아님 출력버퍼에 100을 입력버퍼가 50이니까 입력버퍼에 2번에 걸쳐 다 전송할때까지?
2.block일 경우 read함수는 언제까지 block되는 건가요? 입력 버퍼에서 100만큼 읽을 동안?
입력버퍼가 50이니까 2번 받을 때까지입니까?
3.만약 위와 같다면 1번이 100씩 전송을 하다가 75만 남은 상황에서 쓰면 출력 버퍼에 75가 들어가면
100이 안되니까 계속 block이 되어야 하는데 리턴되어버리는데.
이런 것은 어떤 내부동작인거죠?(뭐 예를 들어 100을 쓸려고 했는데 더이상 없다는 정보를 받는다라는 가)
read도 마찬가지로 입력버퍼에 받은 내용이 최대로 받을 수 있는 양보다 적어도 받은 양만큼 리턴되는데 어떤 내부동작인지요?
***4**. Non block일경우 write와 read가 리턴되는 시점은 언제인가요?
write가 100을 썼는데 출력버퍼에 100이 들어가지 않아도 리턴 하는 건가요??
만약 그렇게 되었을 경우는 출력버퍼에 70을 썻다고 가정을 하면
입력버퍼에 30을 보내서 read 한번으로 20을 읽었다고 하면.
출력버퍼에 40
입력버퍼에 10
이렇게 남아있는 상태로 있다가 또 다음동작이 write나 read가 오면 큐형식으로 버퍼 뒤쪽에 들어오고 한번읽은 만큼 읽고 하는 건가요??
1과 2의 관계가
1과 2의 관계가 불명확하므로 1번을 답하기는 좀 어렵습니다.
프로세스 1과 프로세스 2가 파이프로 연결되어 있는 것을 가정하는 건가요?
2. 요청한 바이트 수만큼 읽었거나, EOF를 만났거나 할 때까지 block됩니다.
이런 경우에는 50바이트씩 요청해서 두 번 읽으면 되겠네요. 두 번 block되었다가 다 읽어들이면 block이 해제되는 거죠.
3. 정확하게 바이트 수를 지정하지 않으면 다른 영역의 메모리를 보게 됩니다.
4. non blocking mode에서는 함수를 호출하자마자 리턴됩니다. 실제의 write나 read 작업(메모리 복사)이 끝나기도 전에 리턴해 버립니다.
댓글 달기