我已经创建了一个来自进程A的伪终端(/dev/pts/N)
,并且我正在以特定的时间间隔向随机整数写入。我可以从screen
打开这个点并检查它的输出。
但cat /dev/pts/N
失败:它无限地阻止并且不返回。为什么从我的伪终端读取失败?
我试图从另一个使用open()/read()
函数的函数读取该函数,并且还有read()
永不返回。
int main(){
int source_fd = open("/dev/pts/4", O_RDONLY);
while(1){
char buffer[READ_BUFFER_SIZE] = {0};
char* buff_ptr = buffer;
int r = read(source_fd, (void*)buff_ptr, 1);
// !!!! never comes here
while(r > 0){
++buff_ptr;
r = read(source_fd, (void*)buff_ptr, 1);
}
}
}
1)C++不是C,你错了标签在您的文章。刺激。 2)第二个'fcntl()'覆盖第一个。你也可以把标志提供给'open()',你知道的。 3)伪终端不是文件,它是伪终端,并且像伪终端一样行为。阅读['man 7 pty'](http://man7.org/linux/man-pages/man7/pty.7.html)。您可以使用它来运行nano或一些基于Curses的应用程序;用“猫”来试试它是愚蠢的。 –
是的,我知道C++不是C,但为什么我只能严格遵守C函数只是为了测试和准备一个片段发布?现在问题变成了伪终端不能作为普通文件打开? –
我删除了我所做的C++部分,使其更易于理解和测试,并用'C –