2009-02-25 9 views
8

필자는 본질적으로 로깅 스레드 인 하나의 리스너에게 많은 프로세스가 메시지를 보내는 POSIX (OSX) 용 프로그램을 작성하고 있습니다. 모든 프로세스는 별도의 프로그램에서 실행되며 단일 프로세스가 작성하는 단일 명명 된 파이프 (FIFO)를 사용하지만 단일 프로세스 만 읽는 것은 매우 유혹적입니다.많은 프로세스가 posix의 명명 된 파이프에있는 단일 판독기에 쓰는 것에 대한 반향이 있습니까?

질문 :

1)이 기능을 사용할 수 있습니까? - 필자는이 작업을 bash를 사용하여 여러 개의 프로세스가 작성된 FIFO를 설정하도록 만들 수 있습니다. 따라서 이론 상으로는 이것이 작동한다는 것을 알고 있습니다. 그러나 실제로, 내가 광택을 쓰고있는 문제가 있습니까?

쉘 # 1

$ mkfifo /tmp/fifo 
$ cat /tmp/fifo 

쉘 # 2 각 작가는 상대적으로 짧은 메시지를 작성하는 경우 # 3

$ cat > /tmp/fifo 
"Type stuff here, after hitting enter, it is read by shell #1" 

2) (< 100 바이트?) 나는 각각의 호출이 있다고 가정 할 수 있습니다 write()는 독자에게 보내질 것입니다. 또는 한 메시지의 절반이 다른 작가의 다른 메시지의 절반으로 왜곡 될 위험이 있습니까?

어떤 조언을 주셔서 감사합니다.

답변

10

FIFO 쓰기는 페이지 크기보다 작 으면 원자이어야합니다. 100 바이트 메시지에는 문제가 없어야합니다. 리눅스에서 최대 크기는 4K 였지만 지금은 더 크다고 생각합니다. 필자는 메시지 전달을 위해 몇 가지 시스템에서이 기술을 사용했다.

출력 버퍼링으로 인해 동기화 문제가 발생할 수 있으므로 일련의 쓰기를 사용하는 경우 문제가 발생할 수 있습니다. 그래서 전체 메시지가 한 번에 작성되었는지 확인하십시오. 예. 문자열을 만든 다음 인쇄하고 한 번에 여러 조각을 인쇄하지 마십시오.

s="This is a message" 
echo $s 

하지

echo "This " 
echo "is " 
echo " a message" 
+0

당신은 환영합니다 :) – sfossen