This is the mail archive of the cygwin@sourceware.cygnus.com mailing list for the Cygwin project. See the Cygwin home page for more information.
[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index] [Subject Index] [Author Index] [Thread Index]

Problem with socketpair/fork/dup2/fdopen b20




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]...

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 dup 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)XtInputReadMask, read_propice, NULL);
     } else {			/* The child */

-- 
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
"J'en ai cauchemarde... Microsoft l'a fait."
Professional: http://www.laas.fr/~felix         mailto:felix@laas.fr
Personal: http://worldserver.oleane.com/felix   mailto:felix@dial.oleane.com


--   
Want to unsubscribe from this list?                             
Send a message to cygwin-unsubscribe@sourceware.cygnus.com