tcsendbreak()中的持续时间单位是什么?

时间:2018-11-02 09:46:46

标签: c linux

几乎所有Linux联机帮助页termios(3)

  

tcsendbreak()发送连续的零值比特流,用于   如果终端使用异步串行数据,则指定的持续时间   传输。如果持续时间为零,则传输零值位   持续至少0.25秒,但不超过0.5秒。 如果   持续时间不为零,它为某些情况发送零值位   实施定义的时间长度。

     

如果终端未使用异步串行数据传输,   tcsendbreak()返回而没有采取任何措施。

那么,“某些实现定义的时间长度”到底是什么?

3 个答案:

答案 0 :(得分:1)

在linux上,是毫秒。

与您引用的手册页相同:

  

tcsendbreak()的 持续时间 非零的影响是不同的。太阳操作系统          指定间隔时间* N秒,其中N至少为0.25,          且不超过0.5。 Linux ,AIX,DU,Tru64发送 持续时间的中断          毫秒。 FreeBSD和NetBSD以及HP-UX和MacOS忽略该值          持续时间。在Solaris和UnixWare下,tcsendbreak()为非零          持续时间的行为类似于tcdrain()

您可以看到源here

它正在调用__ioctl (fd, TCSBRKP, (duration + 99) / 100);TCSBRKP本身发送了arg十分之一秒的中断,如tty_ioctl(4)联机帮助页所述。

答案 1 :(得分:0)

这意味着在不同的系统上,您可能会看到不同的行为;取决于实现方式选择如何解释duration值。

有关man ioctl_tty(2)的更多细节:

  

(SVr4,UnixWare,Solaris,Linux将tcsendbreak(fd,arg)与                 非零arg,如tcdrain(fd)。 SunOS将arg视为多                 钳子,并发送arg次的时间与完成时间一样长                 对于零参数。 DG / UX和AIX将arg(非零时)视为                 时间间隔(以毫秒为单位)。 HP-UX忽略arg。)

答案 2 :(得分:0)

首先,什么是实现方式?
它是某个标准说明的功能版本(在计算机上运行的软件),或者在特定情况下为功能说明。例如,GCC的C编译器实现 C标准。 GCC编译器软件是C标准的功能版本。

接下来,什么是实现定义的行为?再次以C语言为例,

  

这是未指定的行为,其中每个实现都记录了如何做出选择。

对实现(在这种情况下为不同的编译器)给予标准中某些行为的一定自由。 C标准中给出的一个示例是:

  

实现定义的行为的一个示例是有符号整数右移时的高阶位的传播。

这意味着当有符号整数(其最左边的位为1)右移时,不同的编译器可以做出不同的决定。

在使用tcsendbreak函数的情况下,此函数的不同实现可以发送零值的位,时间长度可以不同(换句话说,实现定义)。