我已經創建了一個來自進程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 –