几乎所有Linux联机帮助页termios(3)
:
tcsendbreak()
发送连续的零值比特流,用于 如果终端使用异步串行数据,则指定的持续时间 传输。如果持续时间为零,则传输零值位 持续至少0.25秒,但不超过0.5秒。 如果 持续时间不为零,它为某些情况发送零值位 实施定义的时间长度。如果终端未使用异步串行数据传输, tcsendbreak()返回而没有采取任何措施。
那么,“某些实现定义的时间长度”到底是什么?
答案 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
函数的情况下,此函数的不同实现可以发送零值的位,时间长度可以不同(换句话说,实现定义)。