Why does a simple named pipe does not work. I am doing some thing wrong

From: Gadde, Srinivas <srinivas.gadde_at_compaq.com>
Date: Fri, 27 Apr 2001 12:15:39 -0700

A.c
---
# cat A.c
#include        <stdarg.h>
#include <fstab.h>
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <dirent.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/param.h>
#include <sys/mount.h>
#include <sys/ioctl.h>
#include <sys/procfs.h>
#include <errno.h>
#define         SERVER_PIPE
"/etc/fr34/sockdir/dldsrvr.pipe"
main ()
{
  int             dm_fd;
  int             ld_fd[2] = {-1,-1};
  int             io_rc;
  int             Rc;
  errno = 0;
  dm_fd = open(SERVER_PIPE,O_RDWR,0666);
  printf ("open %d\n", dm_fd);
  errno = 0;
  Rc = pipe(ld_fd);
  printf ("RC=%d ld_fd[0]=%d ld_fd[1]=%d\n", Rc, ld_fd[0], ld_fd[1]); 
  do {
  errno = 0;
  io_rc = ioctl(dm_fd,I_SENDFD,ld_fd[1]);
  printf ("I_SENDFD ioctl returned %d errno %d\n", io_rc, errno); 
  sleep (5);
  } while (io_rc != 0);
  pause ();
}/* end of main */
# 
Second Program B.c !!!!!!!!!!!!!!!!!!!!!! Starts Here !!!!!!!!!!!!!
# cat B.c
#include        <stdarg.h>
#include <fstab.h>
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <dirent.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/param.h>
#include <sys/mount.h>
#include <sys/ioctl.h>
#include <sys/procfs.h>
#include <sys/stropts.h> /* Added in the sample */
#include <errno.h>
#define         SERVER_PIPE
"/etc/fr34/sockdir/dldsrvr.pipe"
main ()
{
  int             Sd;
  int             Rc;
  struct  strrecvfd       Fds;
  Sd = open(SERVER_PIPE,O_RDWR,0666);
  printf ("open %d\n", Sd);
  errno = 0;
  
  Rc = fattach(Sd,SERVER_PIPE);
  printf ("fattach with Rc %d errno %d\n", Rc, errno);
  errno = 0;
do{
  Rc = ioctl(Sd,I_RECVFD,&Fds);
  printf ("I_RECVFD ioctl Rc %d errno %d\n", Rc, errno);
  sleep (5);
} while (Rc != 0);
  pause ();
}/* end of main */
	 -----Original Message-----
	From: 	Gadde, Srinivas  
	Sent:	Friday, April 27, 2001 12:21 PM
	To:	'tru64-unix-managers_at_ornl.gov'
	Cc:	Gadde, Srinivas
	Subject:	A small question on named pipes
	Hello,
		I am porting a named pipe based applications and I am
getting
	an errno 16 which is "EBUSY" from ioctl (fd, I_SENDFD, pipe[1])
	and also on other program from ioctl(fd,I_RECVFD, pipe[1])
	1). I created the named pipe with "mknod server.pipe p" command
	2). in Program A
	   functionA()
	{
	        int             dm_fd;
	        int             ld_fd[2] = {-1,-1};  
	.
	.
	.
		dm_fd = open(SERVER_PIPE,O_RDWR,0666);
		Rc = pipe(ld_fd);    
	.
	.
	.
	         write(ld_fd[0],Request,sizeof(struct command_s)); /* This
may be out of sequence, I don't know ,
								But I am
writing on 0 */
	.
	.
		io_rc = ioctl(dm_fd,I_SENDFD,ld_fd[1]);     
	            /* I get an errno 16 (EBUSY) */
	}
	In Program B
	FunctionB ()
	{
	int Sd;  
	struct  strrecvfd       Fds; 
	Sd = open(SERVER_PIPE,O_RDWR,0666);
	.
	.
	fattach(Sd,SERVER_PIPE);   
	.
	.
	Rc = ioctl(Sd,I_RECVFD,&Fds);
	/* I get an error EBUSY errno 16 */
	}
	Any help is greatly appreciated.
Received on Fri Apr 27 2001 - 19:16:39 NZST

This archive was generated by hypermail 2.4.0 : Wed Nov 08 2023 - 11:53:42 NZDT