檔案描述符與檔案指標等檔案操作的幾個問題

2021-06-25 13:20:26 字數 1062 閱讀 1700

1.二者對比:

檔案描述符就是open檔案時產生的乙個整數,直到乙個索引作用,它用於unix系統中,用於標識檔案。它是系統呼叫產生的。

檔案指標是指向乙個file的結構體,這個結構體裡有乙個元素就是檔案描述符。它用於ansic標準的io庫呼叫中,用於標識檔案。fopen是依賴於open的;

既然file中包含檔案描述符元素,可以用fopen()直接獲取指標fp,然後使用fp獲得fp中所包含檔案描述符fd的資訊

檔案描述符應該是唯一的,但檔案指標(值)卻不是唯一的,但指向的物件卻應該是唯一的。

file *中除了包含了fd資訊,還包含了io緩衝,所以可以理解為file是對fd的牆頭,是c標準形式,所以file *比fd更適合跨平台,應該多用fopen在,少用open。

c語言檔案指標與檔案描述符之間可以相互轉換:

int fileno(file *stream);

file *fdopen(int fd, const char *mode);

2.關於標準檔案

在程序建立的時候,會預設開啟三個檔案,標準輸入、標準輸出、標準出錯檔案。因為此時剛建立程序,所以開啟檔案的描述符依次是0,1,2。又因為子程序會繼承父程序的程序描述符,所以每個程序預設開啟的三個檔案都是這三個。

另外,需要注意,標準輸入、輸出都是行緩衝的;標準出錯是字元緩衝的。也就是說,一般情況下,一句printf("test");當函式執行完畢這個語句的時候,實際上是沒有輸出的;只有程序退出、緩衝區滿、緩衝區域被重新整理的時候,才會進行輸出。但是如果printf("test\n")就會重新整理標準輸出。

3.關於'\0'&&'\n'

'\0'是乙個c語言約定,表示字串的結尾。\n是檔案約定,表示換行。如果乙個檔案內容如下

abcd

那麼,當我們採用fgets的時候,需要的緩衝區大小是6,需要儲存以上提到的兩個字元,其中\0是fgets函式自動新增的。

檔案描述符與檔案指標

檔案描述符這一概念往往只適用於unix linux這樣的作業系統。什麼是檔案描述符?程序利用檔案描述符來訪問檔案。檔案描述符在形式上是乙個非負整數。實際上,它是乙個索引值,指向每乙個程序所維護的該程序開啟檔案的記錄表。當程式開啟乙個現有檔案或者建立乙個新檔案時,程序就返回乙個檔案描述符。每個linu...

檔案指標和檔案描述符

原文 檔案描述符 在linux系統中,裝置也是以檔案的形式存在,要對該裝置進行操作就必須先開啟這個檔案,開啟檔案就會獲得檔案描述符,它是個很小的正整數。每個程序在pcb process control block 中儲存著乙份檔案描述符表,檔案描述符就是這個表的索引,每個表項都有乙個指向已開啟檔案的...

檔案指標和檔案描述符

檔案描述符 在linux系統中,裝置也是以檔案的形式存在,要對該裝置進行操作就必須先開啟這個檔案,開啟檔案就會獲得檔案描述符,它是個很小的正整數。每個程序在pcb process control block 中儲存著乙份檔案描述符表,檔案描述符就是這個表的索引,每個表項都有乙個指向已開啟檔案的指標。...