एक अंतर प्रक्रिया संचार (आईपीसी) का उचित कार्यान्वयन - लिनक्स, प्रक्रिया, आईपीसी, अंतर-प्रक्रिया-संचार

क्या निम्नलिखित इंटर-प्रोसेस संचार का उचित कार्यान्वयन है?

#include <stdio.h>
#include <fcntl.h>
#include <sys/poll.h>

int main(int argc, char** argv) {
if (argc > 1) {
//Sending side
struct stat buffer;
if (stat("/tmp/PROCAtoPROCB", &buffer) != 0)
mkfifo("/tmp/PROCAtoPROCB", (mode_t)0600);

int fdFIFO = open("/tmp/PROCAtoPROCB", O_WRONLY | O_NONBLOCK);
if (fdFIFO > 0) {
write(fdFIFO, (void *)argv[1], sizeof(argv[1]));
close(fdFIFO);
}
} else {
//Receiving side
int fdFIFO = -1;
struct stat buffer;
if (stat("/tmp/PROCAtoPROCB", &buffer) != 0)
mkfifo("/tmp/PROCAtoPROCB", (mode_t)0600);

while (1) {
struct pollfd pollfds[1];
if (fdFIFO == -1)
fdFIFO = open("/tmp/PROCAtoPROCB", O_RDONLY | O_NONBLOCK);
pollfds[0].fd = fdFIFO;
pollfds[0].events = POLLIN;
poll(pollfds, 1, -1);
if (pollfds[0].revents & POLLIN) {
char buf[1024];
read(fdFIFO, &buf, 1024);
close(fdFIFO);
fdFIFO = -1;
printf("Other process says %sn", buf);
}
printf("End of loopn");
}
}
return 0;
}

ऐसा लगता है कि यह काम कर रहा है लेकिन मैं सोच रहा हूं कि क्या रेस की स्थिति लटकने की ओर अग्रसर हो सकती है। एक बाधा यह है कि दोनों प्रक्रियाओं को स्वतंत्र रूप से और किसी भी क्रम में शुरू करने की आवश्यकता है।

उत्तर:

जवाब के लिए 0 № 1

कुछ तनाव परीक्षणों में कोई समस्या नहीं आई है, इसलिए अगर कोई कोड का पुन: उपयोग करना चाहता है तो कार्यान्वयन ठीक लगता है।


संबंधित सवाल
सबसे लोकप्रिय