मैं सी के लिए बहुत नया हूं इसलिए कृपया मेरे साथ भालू। मैं वास्तव में लंबे समय से इसके साथ संघर्ष कर रहा हूं और मुझे त्रुटि के कारण को कम करने में कठिन समय था।सी अजीब विसंगति, फ़ाइल में लिखते समय (आमतौर पर stdout पर लिखते समय काम करता है)
मैंने देखा कि जब फ़ाइल को फोर्किंग प्रक्रिया और लिखना (केवल मूल प्रक्रिया फ़ाइल को लिखती है तो एक अजीब चीज होती है, आउटपुट को फोर्क की संख्या से गुणा किया जाता है, समझाने में कठोर, इस प्रकार मैंने एक छोटा परीक्षण किया कोड आप file=stdout
के साथ चलाने जहां सकता है और यह समस्या का पुनर्निर्माण करने
#include <stdio.h>
#include <stdlib.h>
void foo()
{
FILE* file = fopen("test", "w");
int i=3;
int pid;
while (i>0)
{
pid=fork();
if(pid==0)
{
printf("Child\n");
exit(0);
}
else if(pid > 0)
{
fputs("test\n", file);
i=i-1;
}
}
}
int main()
{
foo();
exit(EXIT_SUCCESS);
}
संकलित करें और जिस तरह से यह है एक बार यह चलाने के लिए और एक बार जब stdout
के लिए लिख उत्पादन होता है:।।
test test test
लेकिन जब लेखन एफ के लिए इले उत्पादन होता है:
test test test test test test
इसके अलावा, अगर आप अनुक्रमण जोड़ सकते हैं और एक बड़ी संख्या के लिए i
बदलते हैं तो आप एक पैटर्न के कुछ प्रकार देख सकते हैं, लेकिन वह मेरी मदद नहीं करता है।
अच्छी तरह से कहा गया कि मुझे नहीं पता कि यह क्यों हो सकता है, न ही इसे कैसे ठीक किया जाए। लेकिन मैं सी में कुल नौसिखिया हूं इसलिए यह सब के लिए एक सामान्य तार्किक स्पष्टीकरण हो सकता है =)।
आपके सभी समय और उत्तरों के लिए धन्यवाद।
आपके त्वरित उत्तर के लिए बहुत बहुत धन्यवाद। मैं वास्तव में सभी कोडों की जांच करने में काफी समय बिताता हूं और यहां तक कि जब मैंने यह देखा तो मुझे अभी भी पता नहीं था कि यह क्या है। अब मैं थोड़ा बेवकूफ महसूस करता हूं, लेकिन हे, हर किसी को सीखने की जरूरत है। एक बार फिर धन्यवाद। – Ben
पीओएसईक्स में प्रासंगिक पाठ यहां है: http://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_05_01 –
'printf ("child \ n") नहीं होना चाहिए;' mutex लॉक होना चाहिए? – farhanhubble