使用C++读/写设备

Dan*_*ani 2 c++ io device

如何在C++中读/写设备?设备在/dev/ttyPA1.
我想到了fstream但是我不知道设备是否有输出我可以在不阻塞应用程序的情况下读取.
我的目标是创建和应用程序,您可以将内容写入终端并将其发送到终端/dev/ttyPA1.如果设备有回写的东西,它将从设备读取并写入屏幕.如果不是,它将给用户提示再次写入设备.
我怎样才能做到这一点?

Ada*_*eld 6

使用open(2),read(2)write(2)读取和写入设备(不要忘记close(2)完成后).您也可以使用C stdio函数(fopen(3)和朋友)或C++ fstream类,但如果这样做,您几乎肯定要禁用缓冲(setvbuf(3)对于stdio或outFile.rdbuf()->pubsetbuf(0, 0)对于fstreams).

但是,这些都将以阻塞模式运行.您可以使用select(2)它来测试是否可以在不阻塞的情况下读取或写入文件描述符(如果不可能,则不应该这样做).或者,您可以在文件描述符上打开带有O_NONBLOCK标志的文件(或用于fcntl(2)在打开后设置标志)以使其无阻塞; 然后,任何调用read(2)write(2)将阻止的调用都会立即失败EWOULDBLOCK.

例如:

// Open the device in non-blocking mode
int fd = open("/dev/ttyPA1", O_RDWR | O_NONBLOCK);
if(fd < 0)
    ;  // handle error

// Try to write some data
ssize_t written = write(fd, "data", 4);
if(written >= 0)
    ;  // handle successful write (which might be a partial write!)
else if(errno == EWOULDBLOCK)
    ;  // handle case where the write would block
else
    ;  // handle real error

// Reading data is similar
Run Code Online (Sandbox Code Playgroud)