मैं दो कार्यक्रमों उनमें से एक जनरेटर नामित जो कुछ पाठ मुद्रित हर दूसरेग stdout stdin के लिए वास्तविक समय
int main(int argc, char** argv) {
for(int i = 0; i < 10 ; i++) {
printf("something\n");
sleep(1);
}
return (EXIT_SUCCESS);
}
तो एक एक दूसरे कार्यक्रम यह उपभोक्ता फोन अब के लिए है, जो एक standart इनपुट से पढ़ना चाहिए है बनाते हैं इसे किसी अन्य पाठ में जोड़ें और इसे पुनः मुद्रित करें। इसे इस तरह देखें:
int main(int argc, char** argv) {
char line[BUFSIZ];
while(scanf("%s",line) != -1){
printf("you entered %s \n",line);
}
return (EXIT_SUCCESS);
}
जब मैं उन्हें संकलन और जैसे ही एक जनरेटर चलाने का प्रयास ./generator यह के रूप में मैं उम्मीद काम करता है। हर दूसरे कुछ कंसोल पर प्रिंट है। लेकिन जब मैं उन्हें दोनों को चलाने की कोशिश करता हूं ./generator | ./consumer जैसा कि मैंने अपेक्षा की थी, यह काम नहीं करता था। मैं 10 सेकेंड का इंतजार करता हूं और उसके बाद की 10 लाइनें प्राप्त करती हैं, आपने कुछ दर्ज किया है, मैं हर सेकेंड में "आपने कुछ दर्ज किया" प्रिंट करना चाहता हूं।
क्या आप मुझे समझा सकते हैं कि ऐसा क्यों है, या बेहतर टेलि मुझे उम्मीद है कि अपेक्षित व्यवहार कैसे प्राप्त किया जाए?
या आप का उपयोग कर stdbuf -o0 ./generator कमांड लाइन पर बफरिंग बंद कर सकते हैं | ।/ उपभोक्ता –
@RomanHocke प्रतीक्षा करें एक प्रोग्राम मौजूद है जो उपयोगकर्ता मोड व्यवहार को किसी अन्य प्रक्रिया के पूर्व-निष्पादन के लिए बदल देता है? वैसे यह दिलचस्प है ... –