有名管道的使用

命名管道和无名管道基本相同,但也有不同点:
无名管道只能由父子进程使用;
但是通过命名管道,不相关的进程也能交换数据。

关于有名管道的操作:
1.创建管道mkfifo
2.打开管道open
3.读管道read
4.写管道write
5.关闭管道close
6.删除管道unlink

FIFO文件在使用上和普通文件有相似之处,但是也有不有
不同之处:
1. 读取fifo文件的进程只能以”RDONLY”方式打开fifo文件。
2. 写fifo文件的进程只能以”WRONLY”方式打开fifo
3. fifo文件里面的内容被读取后,就消失了。但是普通文件里面的内容读取后还存在。

//#include < sys/types.h >
//#include < sys/stat.h >
//#include < errno.h >
//#include < fcntl.h >
//#include < stdio.h >
//#include < stdlib.h >
//#include < string.h >

//#define FIFO “/tmp/myfifo”

main(int argc,char** argv)

{

char buf_r[100];

int  fd;

int  nread;



/* 创建管道 */

if((mkfifo(FIFO,O_CREAT|O_EXCL)<0)&&(errno!=EEXIST))

    printf("cannot create fifoserver\n");



printf("Preparing for reading bytes...\n");



memset(buf_r,0,sizeof(buf_r));



/* 打开管道 */

fd=open(FIFO,O_RDONLY|O_NONBLOCK,0);

if(fd==-1)

{

    perror("open");

    exit(1);    

}

while(1)

{

    memset(buf_r,0,sizeof(buf_r));



    if((nread=read(fd,buf_r,100))==-1)

    {

        if(errno==EAGAIN)

            printf("no data yet\n");

    }

    printf("read %s from FIFO\n",buf_r);

    sleep(1);

}   

pause(); /*暂停,等待信号*/

unlink(FIFO); //删除文件

}
//#include < sys/types.h>
//#include < sys/stat.h >
//#include < errno.h >
//#include < fcntl.h >
//#include < stdio.h >
//#include < stdlib.h >
//#include < string.h >
//#define FIFO_SERVER “/tmp/myfifo”

main(int argc,char** argv)

{

int fd;

char w_buf[100];

int nwrite;



/*打开管道*/

fd=open(FIFO_SERVER,O_WRONLY|O_NONBLOCK,0);



if(argc==1)

{

    printf("Please send something\n");

    exit(-1);

}



strcpy(w_buf,argv[1]);



/* 向管道写入数据 */

if((nwrite=write(fd,w_buf,100))==-1)

{

                printf("The FIFO has not been read yet.Please try later\n");

}

else 

    printf("write %s to the FIFO\n",w_buf);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值