विफल रहता है जब मैं C++ में किसी बच्चे POSIX थ्रेड से/proc/net/tcp खोलने का प्रयास करता हूं तो यह "ऐसी कोई फ़ाइल या निर्देशिका नहीं" त्रुटि। अगर मैं इसे पैरेंट थ्रेड से खोलने की कोशिश करता हूं तो यह हर बार सफल होता है, और इसे पैरेंट थ्रेड में खोलने/बंद करने की प्रक्रिया तब बच्चे के धागे में भी एक तिहाई समय में सफल होती है। मैं बिना किसी मुद्दे के बच्चे के थ्रेड में 100% समय/खोल/अपटाइम खोल सकता हूं। यहाँ कुछ उदाहरण कोड है जो के साथ "जी ++ -Wall test.cc -ओ परीक्षण -pthread" संकलित किया जा सकता है: (POSIX थ्रेड से C++ में खोलना/proc/net/tcp अधिकांश समय
#include <iostream>
#include <fstream>
#include <cstring>
#include <cerrno>
#include <pthread.h>
using namespace std;
void * open_test (void *)
{
ifstream in;
in.open("/proc/net/tcp");
if (in.fail())
cout << "Failed - " << strerror(errno) << endl;
else
cout << "Succeeded" << endl;
in.close();
return 0;
}
int main (int argc, char * argv[])
{
open_test(NULL);
pthread_t thread;
pthread_create(&thread, NULL, open_test, NULL);
pthread_exit(0);
}
मैं एक इंटेल i5-2520M के साथ एक Ubuntu 12.04 बॉक्स पर यह चला रहा हूँ 2 कोर * 2 आभासी कोर) लिनक्स कर्नेल 3.2.0 पर।
[email protected]:/tmp$ ./test
Succeeded
Failed - No such file or directory
[email protected]:/tmp$ ./test
Succeeded
Succeeded
[email protected]:/tmp$ ./test
Succeeded
Failed - No such file or directory
[email protected]:/tmp$ ./test
Succeeded
Failed - No such file or directory
[email protected]:/tmp$ ./test
Succeeded
Succeeded
[email protected]:/tmp$ ./test
Succeeded
Failed - No such file or directory
[email protected]:/tmp$
यह शायद ध्यान देने योग्य बात है कि मैं इस समस्या अगर मैं POSIX धागे के बजाय कांटा का उपयोग नहीं है लायक है: यहाँ एक पंक्ति में उपरोक्त कोड चल 6 बार मुझे का उत्पादन होता है। अगर मैं कांटा का उपयोग करता हूं, तो बच्चे की प्रक्रिया में कोई समस्या नहीं होती है/proc/net/tcp
बस कुछ डेटा पॉइंट फेंकने के लिए .... ऐसा लगता है कि यह लिनक्स में 2.6.35 के रूप में एक प्रतिगमन है समय के 100% काम करने के लिए। 3.2.0 ज्यादातर समय मेरे धीमे पुराने पेंटियम एम आधारित लैपटॉप पर भी।
क्या आपने 3.4.4 कर्नेल के साथ प्रयास किया था? –
@BasileStarynkevitch मैं पुन: पेश करने पर 3.4.4 –
@MikeCardwell में सक्षम हूँ, आप लिनक्स कर्नेल के खिलाफ एक बग के रूप में इस पर विचार किया है दाखिल? –