Subject: Problem with socketpair/fork/dup2/fdopen b20
From: Francois Felix Ingrand <[email-masked]>
To: [email-masked]
Date: 06 Feb 1999 13:56:28 +0100

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:[email-masked]
Personal: http://worldserver.oleane.com/felix   mailto:[email-masked]

--   
Want to unsubscribe from this list?                             
Send a message to [email-masked]