为什么应该在串行端口中设置“无终端应控制进程”选项?

时间:2019-01-25 06:37:08

标签: c linux terminal serial-port

fd = open("/dev/ttyUSB0",O_RDWR | O_NOCTTY);    
                               /* O_NOCTTY - No terminal will control the process   */

我们为什么要指定或不指定此选项?它做什么和不做什么?

1 个答案:

答案 0 :(得分:1)

GNU C library的文档中对此进行了回答:

  

如果命名文件是终端设备,请不要将其作为该过程的控制终端。有关成为控制终端意味着什么的信息,请参见Job Control

     

在GNU / Hurd系统和4.4 BSD上,打开文件绝不会使其成为控制终端,并且 O_NOCTTY 为零。但是,当您打开作为终端设备的文件时,GNU / Linux系统和其他一些系统对 O_NOCTTY 使用非零值并设置控制终端。为便于携带,在避免这种情况很重要时,请使用 O_NOCTTY

也就是说,由于USB串行设备被视为终端,所以使用该标志是因为您不希望它成为 like 终端,并允许设备来启动/停止恰好与给定用户连接的作业(例如进程)。

进一步阅读: