网站大量收购闲置独家精品文档,联系QQ:2885784924

linuxC进程间通信有名管道fifo.pdfVIP

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
进程间通信—有名管道 ◦ fifo 简介 无名管道,它只能用于具有亲缘关系的进程之间,这就大大地限制了管道的使 用。有名管道的出现突破了这种限制,它可以使互不相关的两个进程实现彼此通 信。该管道可以通过路径名来指出,并且在文件系统中是可见的。在建立了管道 之后,两个进程就可以把它当作普通文件一样进行读写操作,使用非常方便。 FIFO 是严格地遵循先进先出规则的,对管道及 FIFO 的读总是从开始处返回 数据,对它们的写则把数据添加到末尾,它们不支持如 lseek()等文件定位操作。 有名管道的创建可以使用函数 mkfifo(),该函数类似文件中的 open()操作,可以指 定管道的路径和打开的模式。 进程通过文件 IO 来操作有名管道,有名管道创建之后,任何进程都可以访 问。 ◦ fifo 打开方式 在创建管道成功之后,就可以使用 open()、read()和 write()这些函数了。与 普通文件的开发设置一样,对于为读而打开的管道可在 open()中设置 O_RDONLY ,对于为写而打开的管道可在open()中设置 O_WRONLY。 1. 如果打开的时候是,是以只读方式(O_RDONLY )打开的,则open 返回 的文件描述符 fd 是只读的。 2. 如果打开的时候是,是以只写方式(O_WRONLY)打开的,则 open 返回的 文件描述符 fd 是只写的 3. 如果打开的时候是,是以读写方式(O_RDWR)打开的,则 open 返回的文 件描述符 fd 是读写的 ◦ fifo 读写特性 由于普通文件的读写时不会出现阻塞问题,而在管道的读写中却有阻塞的可能,这里的非阻塞标志可以 在 open()函数中设定为 O_NONBLOCK。下面分别对阻塞打开和非阻塞打开的读写进行讨论。 (1)对于读进程。 • 若该管道是阻塞打开,且当前 FIFO 内没有数据,则对读进程而言将一直阻塞到有数据写入。 • 若该管道是非阻塞打开,则不论 FIFO 内是否有数据,读进程都会立即执行读操作。即如果 FIFO 内没有数据,则读函数将立刻返回 0。 ()对于写进程。 • 若该管道是阻塞打开,则写操作将一直阻塞到数据可以被写入。 • 若该管道是非阻塞打开而不能写入全部数据,则读操作进行部分写入或者调用失败。 ◦ fifo 创建函数 mkfifo()函数格式 表 8.4 列出 mkfifo()函数的语法要点。 表 8.4 mkfifo()函数语法要点 #include sys/types.h 所需头文件 #include sys/state.h 函数原型 int mkfifo(const char *filename,mode_t mode) 函数传入值 filename :要创建的管道 O_RDONLY :读管道 O_WRONLY :写管道 函数传入值 mode : O_RDWR :读写管道 O_NONBLOCK :非阻塞 O_CREAT :如果该文件不存在,那么就创建一个新的文件,并用 第三个参数为其设置权限 函数传入值 mode : O_EXCL :如果使用O_CREAT 时文件存在,那么可返回错误消息。 这一参数可测试文件是否存在 成功:0 函数返回值 出错:1 再对 FIFO 相关的出错信息做一归纳,以方便用户查错。 FIFO 相关的出错信息 EACCESS 参数 filename 所指定的目录路径无可执行的权限 EEXIST 参数 filename 所指定的文件已存在 ENAMETOOLONG 参数 filename 的路径名称太长 ENO

文档评论(0)

0520 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档