linux进程通信(三)--FIFO
1./*fifoserver.c:向FIFO中写入信息*/
2.#include<sys/types.h>
3.#include<sys/stat.h>
4.#include<errno.h>
5.#include<fcntl.h>
6.#defineFIFO_SERVER"FIFO4"
7.main(intargc,char**argv)
8.{
9.intfd=0;
10.charw_buf[4096];
11.intreal_wnum;
12.memset(w_buf,0,4096);
13.if((mkfifo(FIFO_SERVER,O_CREAT|O_EXCL|0666)<0)&&(errno!=EEXIST))
14.printf("cannotcreatefifoserver\n");
15./*此处存在着打开依赖,即若没有读端打开FIFO的话,写端就阻塞在写端*/
16.fd=open(FIFO_SERVER,O_WRONLY);
17.if(fd==-1)
18.printf("openerror;noreadingprocess\n");
19.printf("%d\n",fd);
20.
21.real_wnum=write(fd,w_buf,2048);
22.if(real_wnum==-1)
23.printf("writetofifoerror;trylater\n");
24.else
25.printf("realwritenumis%d\n",real_wnum);
26./*往FIFO写入的数据都是原子的,如果没有足够的空间,则会等待,而不是一点一点的写入。*/
27.real_wnum=write(fd,w_buf,4096);
28.if(real_wnum==-1)
29.printf("writetofifoerror;trylater\n");
30.else
31.printf("realwritenumis%d\n",real_wnum);
32.}
1./*fifoclient.c:从FIFO中读出数据*/
2.#include<sys/types.h>
3.#include<sys/stat.h>
4.#include<errno.h>
5.#include<fcntl.h>
6.#defineFIFO_SERVER"FIFO4"
7.main(intargc,char**argv)
8.{
9.charr_buf[4096];
10.intfd;
11.intr_size;
12.intret_size;
13.r_size=atoi(argv[1]);
14.memset(r_buf,0,sizeof(r_buf));
15.fd=open(FIFO_SERVER,O_RDONLY);
16.if(fd==-1)
17.{
18.printf("open%sforreaderror\n");
19.exit(1);
20.}
21.printf("%d\n",fd);
22.
23.while(1)
24.{
25.ret_size=read(fd,r_buf,r_size);
26.if(ret_size==-1)
27.printf("nodataavlaible\n");
28.else
29.printf("realreadbytes%d\n",ret_size);
30.sleep(1);
31.}
32.unlink(FIFO_SERVER);
33. }