/*fifo_write.c*/
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <fcntl.h>
#include <memory.h>
#include <stdlib.h>
#include <unistd.h>
#define FIFO_SEVER "/tmp/fifosever"
int main(int argc,char *argv[])
{
int fd;
char w_buf[4096*2];
int real_wnum;
memset(w_buf,0,4096*2);
if((mkfifo(FIFO_SEVER,O_CREAT|O_EXCL) < 0) && (errno != EEXIST))
{
printf("cannt create fifosever!\n");
exit(0);
}
fd = open(FIFO_SEVER,O_WRONLY|O_NONBLOCK);
if(fd == -1)
{
if(errno == ENXIO)
printf("open error,no reading process\n");
}
scanf("%s",w_buf);
real_wnum = write(fd,w_buf,2048);
if(real_wnum == -1)
{
if(errno == EAGAIN)
{
printf("write to fifo error try later!\n");
}
}
else
{
printf("real write num is %d\n",real_wnum);
}
return 0;
}
/*fifo_read.c*/
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <fcntl.h>
#include <stdlib.h>
#include <memory.h>
#define FIFO_SEVER "/tmp/fifosever"
int main(int argc,char **argv)
{
char r_buf[4096*2];
int fd;
int r_size;
int ret_size;
r_size = atoi(argv[1]);
printf("requore real read bytes %d\n",r_size);
memset(r_buf,0,sizeof(r_buf));
fd = open (FIFO_SEVER,O_RDONLY|O_NONBLOCK);
if(fd == -1)
{
printf("open %s for read error!\n");
exit(0);
}
while(1)
{
memset(r_buf,0,sizeof(r_buf));
ret_size = read(fd,r_buf,r_size);
if(ret_size == -1)
{
if(errno == EAGAIN)
printf("no data avalible\n");
}
printf("real read bytes %d\n",ret_size);
sleep(1);
}
pause();
unlink(FIFO_SEVER);
return 0;
}