--- # 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