代码改变世界

2014025633《嵌入式系统程序设计》第七周学习总结

2017-06-05 20:44  2014025633  阅读(143)  评论(0编辑  收藏  举报

2014025633《嵌入式系统程序设计》第七周学习总结

教材学习总结

一.有名管道
管道是无名管道,它只能用于具有亲缘关系的进程之间,这就大大地限制了管道的使用。有名
管道的出现突破了这种限制, 它可以使互不相关的两个进程实现彼此通信。 该管道可以通过路径名来指出,
并且在文件系统中是可见的。在建立了管道之后,两个进程就可以把它当作普通文件一样进行读写操作,
使用非常方便。不过值得注意的是, FIFO 是严格地遵循先进先出规则的,对管道及 FIFO 的读总是从开始
处返回数据,对它们的写则把数据添加到末尾,它们不支持如 lseek()等文件定位操作。
二创建管道
在创建管道成功之后,就可以使用 open()、 read()和 write()这些函数了。与普通文件的开发设置一样,对于
为读而打开的管道可在 open()中设置 O_RDONLY, 对于为写而打开的管道可在 open()中设置 O_WRONLY,
在这里与普通文件不同的是阻塞问题。由于普通文件的读写时不会出现阻塞问题,而在管道的读写中却有
阻塞的可能,这里的非阻塞标志可以在 open()函数中设定为 O_NONBLOCK。下面分别对阻塞打开和非阻
塞打开的读写进行讨论。
(1)对于读进程。
若该管道是阻塞打开,且当前 FIFO 内没有数据,则对读进程而言将一直阻塞到有数据写入。
若该管道是非阻塞打开,则不论 FIFO 内是否有数据,读进程都会立即执行读操作。即如果 FIFO
内没有数据,则读函数将立刻返回 0。
(2)对于写进程。
若该管道是阻塞打开,则写操作将一直阻塞到数据可以被写入。
若该管道是非阻塞打开而不能写入全部数据,则读操作进行部分写入或者调用失败。