/*fifoserver.c:向FIFO中写入信息*/
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <fcntl.h>
#define FIFO_SERVER "FIFO4"
main(int argc,char** argv)
{
int fd=0;
char w_buf[4096];
int real_wnum;
memset(w_buf,0,4096);
if((mkfifo(FIFO_SERVER,O_CREAT|O_EXCL|0666)<0)&&(errno!=EEXIST))
printf("cannot create fifoserver\n");
/*此处存在着打开依赖,即若没有读端打开FIFO的话,写端就阻塞在写端*/
fd=open(FIFO_SERVER,O_WRONLY);
if(fd==-1)
printf("open error; no reading process\n");
printf("%d\n",fd);
real_wnum=write(fd,w_buf,2048);
if(real_wnum==-1)
printf("write to fifo error; try later\n");
else
printf("real write num is %d\n",real_wnum);
/*往FIFO写入的数据都是原子的,如果没有足够的空间,则会等待,而不是一点一点的写入。*/
real_wnum=write(fd,w_buf,4096);
if(real_wnum==-1)
printf("write to fifo error; try later\n");
else
printf("real write num is %d\n",real_wnum);
}
/*fifoclient.c:从FIFO中读出数据*/
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <fcntl.h>
#define FIFO_SERVER "FIFO4"
main(int argc,char** argv)
{
char r_buf[4096];
int fd;
int r_size;
int ret_size;
r_size=atoi(argv[1]);
memset(r_buf,0,sizeof(r_buf));
fd=open(FIFO_SERVER,O_RDONLY);
if(fd==-1)
{
printf("open %s for read error\n");
exit(1);
}
printf("%d\n",fd);
while(1)
{
ret_size=read(fd,r_buf,r_size);
if(ret_size==-1)
printf("no data avlaible\n");
else
printf("real read bytes %d\n",ret_size);
sleep(1);
}
unlink(FIFO_SERVER);
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。