Apue的3-4.c例子的理解。。。

來源:互聯網
上載者:User

每次學習都沒有記錄,這裡我就記錄一下。

Linux中標準輸入為0,標準輸出為1,標準錯誤輸出為2

那麼./a.out 0 就是測試標準輸入是否具可讀。因為預設標準輸入是終端,終端是可讀可寫的。故輸出為read write

但是$ ./a.out 0 < /dev/tty 實際是$ ./a.out 0 0< /dev/tty是把/dev/tty重新導向為標準輸入,那麼fcntl(0,F_GETFL,0)就是判斷/dev/tty的讀寫屬性,而/dev/tty是唯讀,故輸出為read ony

若是$ ./a.out 1 < /dev/tty 實際是$ ./a.out 1 0< /dev/tty是把/dev/tty重新導向為標準輸入,但此時的標準輸出未變,仍為終端。但因為argv[1]的值為1,測試的仍然是終端的屬性,故輸出為read write。

// 暫時先寫到這,可能理解不太對,還要再改改。

$ ./a.out 1 > temp.foo  就是輸出重新導向,temp.foo是個建立的檔案,那麼fcntl(1, F_GETFL, 0);就是判斷temp.foo的讀寫屬性,建立的temp.foo預設是read write的

$ ./a.out 0 > temp.foo同理,輸出被重新導向到temp.foo,但是判斷的仍然是標準輸入,也就是終端,故還是read write

//下面討論./a.out 2 2>>temp.foo

先來補點理論知識

2代表stderr

2>>filename        # 重新導向並追加stderr到檔案"filename". 

那麼./a.out 2 2>>temp.foo 就是檢查被重新導向後的檔案temp.foo的在檔案描述符2上的屬性

對於

$ ./a.out 5 5<>temp.foo同樣需要補理論知識

[j]<>filename        # 為了讀寫"filename", 把檔案"filename"開啟, 並且將檔案描述符"j"分配給它.         # 如果檔案"filename"不存在, 那麼就建立它.         # 如果檔案描述符"j"沒指定, 那預設是fd 0, stdin. 

5<>temp.foo表示在檔案描述符5上開啟檔案temp.foo以供讀和寫,程式就是檢查temp.foo的讀寫屬性,很明顯我是"<>"的,也就是讀寫開啟這個檔案的

那麼結果也就是read write

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.