繁体   English   中英

串行端口和命名管道之间的区别

[英]Difference between Serial Port and Named Pipe

串行端口流和命名管道(FIFO)之间有区别吗? 特别是关于Linux?

我的理解是:

  • 全双工
  • 可以由不相关的进程读取/写入(与常规管道的工作方式相反)

我能想到的唯一区别是:

  • 串行端口具有实际硬件(硬件正在读取/写入)的文件描述符,而命名管道只是在内核上创建的用于存储数据流的“文件”,然后2个(或更多?)进程可以连接并读取/写。
  • 还有其他区别吗?

另外,如果我在一个进程P1中创建了一个命名管道(另一个进程P2与之连接),那么P1可以使用那个文件描述符来写入和读取该命名管道吗? P2可以做同样的事情(读和写)。 或者,如果我希望P1能够写入和读取P2,是否需要创建2个命名管道? 实际用途是P1会将命令写入P2,并且还要从P2读取这些命令的结果。

串行端口用于不同的计算机相互通信,而不是同一计算机内的IPC。 您可以配置串行硬件进行环回,但是串行端口硬件所支持的最高数据速率无法与任何现代互连的速度相提并论-既不是USB也不是eSATA(对于其他名称为“ serial”的接口)或网络互连,例如以太网(甚至无线)。 串行端口速度甚至与FIFO不在同一太阳能系统中。

就其他特征而言,

  • 串行端口将作为设备文件呈现给系统,而FIFO也将作为文件呈现
  • 这样,每个都可以由多个不相关的进程同时打开,以进行读写
  • 但是,您需要特殊的特权才能创建串行端口特殊文件,以及其背后的实际硬件,以使它有用,而任何人都可以创建FIFO
  • 通过串行端口的通信是双向的; 它可以是全双工,但也可以使用半双工模式。
  • FIFO是单向的,但是如有必要,您可以成对使用它们。 原则上,一个进程既可以写入FIFO也可以从FIFO中读取,但是如果要避免使用自己的消息并避免死锁,则需要非常小心。

底线:对于一台机器内的双向IPC,FIFO远远优于串行端口。 您还应该考虑一个套接字接口。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM