2009-02-25 9 views
8

मैं पॉज़िक्स (ओएसएक्स) के लिए एक प्रोग्राम लिख रहा हूं जहां मेरे पास एक श्रोता को संदेश भेजने की कई प्रक्रियाएं होंगी, जो अनिवार्य रूप से लॉगिंग थ्रेड है। सभी प्रक्रियाएं अलग-अलग कार्यक्रमों में चल रही हैं, और एक नामित पाइप (एफआईएफओ) का उपयोग करके कई प्रक्रियाएं लिखती हैं, लेकिन केवल एक ही प्रक्रिया से पढ़ना बहुत मोहक है।क्या पॉज़िक्स में नामित पाइप पर एक ही पाठक को कई प्रक्रियाओं को लिखने के लिए असर पड़ता है?

प्रश्न:

1) क्या यह काम करेगा? - मैं इस काम को कई प्रक्रियाओं के साथ एक फीफो सेट करने के लिए बैश का उपयोग करके कर सकता हूं, इसलिए मैं इस काम को सिद्धांत में जानता हूं। लेकिन व्यावहारिक रूप से, क्या ऐसे मुद्दे हैं जिन पर मैं चमक रहा हूं?

खोल # 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 बाइट्स?) तो मैं यह मान सकते हैं प्रत्येक कॉल कि लिखने के लिए() पाठक को पूरी तरह से भेजा जाएगा? या एक आधे संदेश में एक अलग लेखक से दूसरे संदेश के आधे हिस्से के साथ गड़बड़ी का खतरा होगा?

किसी भी सलाह के लिए धन्यवाद।

उत्तर

10

फीफो लिखना परमाणु होना चाहिए, जब तक कि यह पृष्ठ के आकार के नीचे हो। इसलिए 100 बाइट संदेशों के साथ कोई समस्या नहीं होनी चाहिए। लिनक्स पर अधिकतम आकार 4K होता था, मुझे विश्वास है कि यह अब बड़ा है। लिखने के लिए मैंने इस तकनीक का उपयोग कुछ सिस्टमों पर किया है, क्योंकि लिखने परमाणु समाप्त होता है।

यदि आप लिखने की श्रृंखला का उपयोग कर रहे हैं, तो आप किसी समस्या के साथ समाप्त हो सकते हैं, क्योंकि आउटपुट बफरिंग सिंक समस्या का कारण बन सकती है। तो सुनिश्चित करें कि पूरा संदेश एक समय में लिखा गया है। जैसे। एक स्ट्रिंग बनाएं, फिर प्रिंट करें, एक साथ कई टुकड़े प्रिंट न करें।

s="This is a message" 
echo $s 

नहीं

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

आपका स्वागत है :) – sfossen

संबंधित मुद्दे