2010-01-13 50 views
0

我很喜歡這個 權限創建的pty設備的所有者是CRW-W ----無法寫入PTY - linux下

mknod pty1 c 1 1 
cat > pty1 

告訴我不允許操作。

我後來想做的事情是,我打開文件從程序使用打開和調用寫入發送輸出到終端,就好像它是一個磁盤文件。

貓爲什麼不工作。 我們可以寫入一個pty讀取從pty使用打開和寫入。

我們可以用java來做到這一點。 java寫入一個實際上是pty的文件。

的問題來源: forcing a program to flush its standard output when redirected

更新:是的問題並不清楚。我是否需要添加更多信息?

LS的輸出-la

crw--w---- 1 iamrohitbanga users 1, 1 2010-01-13 18:27 pty1 
crw--w---- 1 iamrohitbanga users 1, 2 2010-01-13 18:29 pty2 

當我這樣做 貓的/ dev/PTS/0在一個終端和貓>的/ dev/PTS在另一個/ 0,不看到一個轉移到另一個的輸入。

+2

您是否看到這個答案?:http://stackoverflow.com/questions/1401002/trick-an-application-into-thinking-its-stdin-is-interactive-not-a-pipe/1401557#1401557 – 2010-01-13 13:56:59

+0

我想以透明的方式寫入一個pty,就好像它是文件系統上的文件一樣。這就是爲什麼我使用貓進行測試。這是不可能的。 – 2010-01-13 14:04:39

+0

請顯示ls -l的完整輸出,哪個用戶和組擁有設備文件?在dmesg中還有什麼有趣的地方? – 2010-01-13 14:39:33

回答

4

這不是PTY如何工作;你應該閱讀man 4 ptyman 4 pts。 (舊BSD風格的設備不再使用)

爲了打開一個僞終端從站(PTS,由ptsname(3)返回的/dev/pts/#),另一個程序必須創建一個僞終端主站(PTM,返回通過posix_openpt(3))並使用grantpt(3)unlockpt(3)啓用PTS。使用forkpty(3) etc.輔助函數比自己調用低級函數容易得多。

甚至在此之後,它不會像FIFO(您似乎期待的那樣)工作:寫入PTS的任何內容在PTM中出現,從PTM中讀取的任何內容都將從PTM寫入。