Delivered-To: listarch-cygwin AT sourceware DOT cygnus DOT com Mailing-List: contact cygwin-help AT sourceware DOT cygnus DOT com; run by ezmlm Delivered-To: mailing list cygwin AT sourceware DOT cygnus DOT com Message-Id: <199902062219.QAA08085@modi.xraylith.wisc.edu> X-Authentication-Warning: modi.xraylith.wisc.edu: LOCALHOST.xraylith.wisc.edu [127.0.0.1] didn't use HELO protocol To: Francois Felix Ingrand cc: gnu-win32 AT cygnus DOT com Subject: Re: Problem with socketpair/fork/dup2/fdopen b20 In-reply-to: Your message of "06 Feb 1999 13:56:28 +0100." <8690ebsnb7 DOT fsf AT dial DOT oleane DOT com> Date: Sat, 06 Feb 1999 16:19:37 -0600 From: Mumit Khan Francois Felix Ingrand writes: > > I cannot get this to work. > > fdopen returns NULL and perror a bad file descriptor... which would suggest > that dup2 did not duplicate stdout in sp[1]... [ .. snippet of example code ... ] Hi Francois, I have code that does similar thing and it works on Cygwin as it does on every POSIX-type system I've run it on. Unless someone can spot something weird, you'll need to supply standalone code that we can compile and run. I'm not sure I understand your logic behind dup'ing stdin/stdout and then fdopen for read/write in the child, but that's probably because I don't know what your code really does. I suggest you chop it down to the smallest size possible and repost as a bug report. Regards, Mumit > > It work under Solaris and other Unices... > > void call_propice_cat(char *log_file) > { > int pid, sp[2]; > > if (socketpair(AF_UNIX, SOCK_STREAM, 0, sp) < 0) { > perror("call_propice: socketpair"); > exit(1); > } > fcntl(sp[1], F_SETFD, 1); /* this is to avoid that the ns will be d > up when we fork */ > > if ((pid = fork()) < 0) { > perror("fork"); > exit(1); > } > > if (pid) { /* The father */ > close(sp[0]); /* Close one side */ > fcntl(sp[1], F_SETFL, FNDELAY); /* I am not sure this is required... > */ > if (dup2(sp[1],1) < 0) > perror("call_propice_cat:dup2"); /* Get stdout plug on sp[1] */ > /* dup2(sp[1],2); Get stderr plug on sp[1] */ > > propicefp = (FILE *)fdopen(sp[1], "r+"); > if (! propicefp) > perror("call_propice_cat:fdopen"); /* Get stdout plug on > sp[1] */ > setbuf(propicefp, NULL); > > propiceInputId = XtAppAddInput(app_context, sp[1], (XtPointer)XtInput > ReadMask, read_propice, NULL); > } else { /* The child */ > > -- > -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= > "J'en ai cauchemarde... Microsoft l'a fait." > Professional: http://www.laas.fr/~felix mailto:felix AT laas DOT fr > Personal: http://worldserver.oleane.com/felix mailto:felix AT dial DOT oleane DOT com > > > -- > Want to unsubscribe from this list? > Send a message to cygwin-unsubscribe AT sourceware DOT cygnus DOT com > -- Want to unsubscribe from this list? Send a message to cygwin-unsubscribe AT sourceware DOT cygnus DOT com