通常,可以同時從多個進程打開串行設備。
可以使用TIOCEXCL
ioctl()
獲得獨佔訪問:
if (!ioctl(fd, TIOCEXCL)) {
/* Any further open() on the tty
that is currently open on descriptor fd
will fail with errno == EBUSY
(except for the administrator, with the
CAP_SYS_ADMIN capability) */
}
,並重新允許其他open()
S,
ioctl(fd, TIOCNXCL);
你需要包括<sys/ioctl.h>
的功能,常數爲<termios.h>
。
許多Linux串行庫已經這樣做。某些串行驅動程序可能一次只允許打開一個驅動程序,因此爲了確定您所看到的行爲的原因,我需要更多詳細信息(如何打開串行設備以及使用的串行設備驅動程序,特定)。
個人 - 我相信這是大多數Linux的串行庫不 - ,我建議你嘗試的ioctl(fd, TIOCEXCL)
,並也許警告用戶,如果它失敗(返回0,如果成功,-1除此以外);並且在所有情況下都使用ioctl(fd, TIOCNXCL); close(fd);
關閉tty。