前言
昨天在寫socket那篇時資料中有關於檔案描述符(file descriptor)的內容,一時竟然想不起來了,大二下在中大修的作業系統,看來是遺忘掉很多了作為交換生當時邊學習邊快活。決定再重新梳理下本概念。
FD的WIKI定義(https://en.wikipedia.org/wiki/File_descriptor)
In Unix and related computer operating systems, a file descriptor (FD, less frequently fildes) is an abstract indicator (handle) used to access a file or other input/output resource, such as a pipe or network socket.
在類Unix系統中,FD是訪問檔案或IO資源的指針.且FD為一個非負整數。
FD與File table與Inode table之間的參照關係:
再具體一些:
注意:多個FD可以指向FT中同一項(如系統調用:dup),多個FT可以指向同一個inode(檔案被多次打開時)
可見從FD指向FT再指向IT,文件的狀態信息和存儲位置信息等都可以被獲取到,FD是進行這些信息查找的發起identifer。
簡單講
在進程中打開一個文件時,OS要為該文件維護信息,而FD即是代表該文件在某一進程下的打開文件編號。
文件描述符與輸出重定向
在類Unix系統中,進程都包含以下三種FD:
重定向符號有:
重定向符號 | 效果 |
---|---|
> | 重定向到一個文件或設備(覆寫) |
>> | 重定向到一個文件或設備(添加) |
< | 輸入重定向到程序 |
用到兩種stream要用&引用,如2>&1(將標準錯誤重定向到標準輸出)
將標準輸出重定向到文件中(覆寫)
1 | root@YoungDebian:/home/aozy/Desktop# echo "Hello" 1> test.txt |
將標準輸出重定向到文件中(添加) 1
2
3
4root@YoungDebian:/home/aozy/Desktop# echo "Hello" 1>> test.txt
root@YoungDebian:/home/aozy/Desktop# cat test.txt
Hello
Hello
將標準錯誤重定向到文件中(覆寫)
1 | root@YoungDebian:/home/aozy/Desktop# date -m 2>test.txt |
將標準輸入重定向到程序:
1 | root@YoungDebian:/home/aozy/Desktop# cat 0< test.txt |