named pipe를 쓸 때의 질문입니다.
글쓴이: cococo / 작성시간: 월, 2006/02/06 - 10:21오전
아침은 드셨는지요. 밥 먹고 나오는 거랑 안 먹고 나오는 거랑 느껴지는 추위가 틀리네요. ㅎㅎㅎ
에... 그래서. 질문입니다만...
두개 이상의 job의 데이터 교환을 pipe로 할라고 합니다. 교환되는 데이터 형태는 7byte ~ 160byte정도 까지 다양합니다. (주로 [제어 신호] 혹은 [제어 신호+Data]의 형태입니다.)
그런데... 이 때 , 하나의 pipe가 어느 정도의 데이터를 보관할 수 있나요?
아침에 와서 기능을 추가하려고 생각해 보니... 만일 송신부에서 40개의 packet을 송신해야 한다면, 최대 6400byte가 송신되어야 하잖아요? 물론 수신부에서도 데이터를 처리하겠지만, 만일 무언가 문제가 생겨서 수신부가 데이터 처리를 못한다면, 버퍼링이 필요할 듯 해서요.
하지만, 현재 기능상에서는 [수신부가 데이터 처리를 못하는 경우]가 생길거라고는 보이지 않거든요.
질문입니다.
1. named pipe방식을 썼을 때, pipe가 최대 얼마까지의 데이터를 가지고 있을 수 있나요? 또한
2. 일반적으로 pipe 방식으로 데이터를 교환할 때에도 버퍼링 처리를 하나요? (현재는 160byte unsigned char를 하나만 선언해 놓고 쓰고 있습니다.)
이상입니다. 그럼... 행복하세요. ^_^
Forums:
$ getconf PIPE_BUF /파이프가 수용할 수 있는 버퍼
$ getconf PIPE_BUF /
파이프가 수용할 수 있는 버퍼량이 초과되면(consumer가 느리다라는..) producer는 블록될 것이므로 버퍼의 크기를 논의하는 것은 의미가 없어 보입니다.
단지, 생산자(producer)가 소비자(consumer)로 인하여 블록되어서는 안된다면, 불가피하게 버퍼링이 필요하겠지요. 아니면 다른 IPC를 동원하거나 해야겠지요.(심지어, 파일로 주고받는....)
거듭 부연하자면, 생산자가 다른 실시간처리를 위해 특정 루틴에서 시간이 지연되어서는 안되는 경우가 아니면, 고민하실 문제가 아니라는 얘기입니다.
답변 감사합니다.
고견 덕에 문제 해결했습니다. 복받으세요. ㅋ
댓글 달기