named pipe

     named pipe其实就是pipe file,在sun操作系统中可以使用mknod pipe_file_name p来创建,操作pipe file与普通文件相同,特别的地方在于:

(1) 对于pipe file,以读打开和以写打开需要成对出现,如果只出现一个,如,只以读打开pipe file,而没有以写打开pipe file,那么该读打开(open)操作会被阻塞,即并没有真正打开pipe file,一直到有以写打开的pipe file

(2) 写入pipe file的内容会被以先进先出的顺序读出,被读出的内容不会继续存在于pipe file中,即pipe file是一种FIFO队列。所以,ls –l看到的pipe file大小一般是0字节的。

(3) 由于pipe file这种读写操作成对出现及一旦对pipe file有写入的内容,就马上会被读出,所以它可以保证读写的原子操作,不像fprint函数,fprint函数会出现输出内容交叉的情况,如,如果4.5fprint函数就把缓冲区填满了,那么第5fprint函数的前一半输出到缓冲区的内容会write函数首先写入文件,第5fprint函数的后半个内容会等到下一个缓冲区填满(或者强制刷新缓冲区)才到真正输出的文件,而在这两个时间段之间,如果有其它进程对相同的文件进行写操作,那么以后在该文件中会看到第5fprint函数的内容之间夹带了其它内容。

(4) 测试,读写操作的成对性:

cat abcd >pipe_file

unix系统中使用cat 命令将abcd文件的内容写入pipe_file,而实际上abcd这个文件不存在。由于unix中对一个command line会首先执行其中的重定向操作,即>pipe_file,而此时,没有为读而打开该pipe_file,因此,重定向操作打开pipe_file会被阻塞,因此cat打开abcd的操作并没有执行,因此上述命令不会报错打不到abcd这个文件。

一旦有为读操作打开pipe_file,如cat <pipe_file,第一个命令的>pipe_file重定向操作的写打开pipe_file会执行,接下来cat abcd也会被执行,这时会报

cat: cannot open abcd的错误。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值