Loading AI tools
来自维基百科,自由的百科全书
檔案描述子(File descriptor)是電腦科學中的一個術語,是一個用於表述指向檔案的參照的抽象化概念。
檔案描述子在形式上是一個非負整數。實際上,它是一個索引值,指向核心為每一個行程所維護的該行程打開檔案的記錄表。當程式打開一個現有檔案或者建立一個新檔案時,核心向行程傳回一個檔案描述子。在程式設計中,一些涉及底層的程式編寫往往會圍繞著檔案描述子展開。但是檔案描述子這一概念往往只適用於UNIX、Linux這樣的作業系統。
每個Unix行程(除了可能的常駐程式)應均有三個標準的POSIX檔案描述子,對應於三個標準流:
整數值 | 名稱 | <unistd.h>符號常數[1] | <stdio.h>檔案流[2] |
---|---|---|---|
0 | Standard input | STDIN_FILENO | stdin |
1 | Standard output | STDOUT_FILENO | stdout |
2 | Standard error | STDERR_FILENO | stderr |
檔案描述子的優點主要有兩個:
例如,下面的程式碼就示範了如何基於檔案描述子來讀取當前目錄下的一個指定檔案,並把檔案內容列印至主控臺。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main (void){
int fd;
int numbytes;
char path[] = "file";
char buf[256];
/*
* O_CREAT:如果文件不存在则创建
* O_RDONLY:以只读模式打开文件
*/
fd = open(path, O_CREAT | O_RDONLY, 0644);
if(fd < 0){
perror("open()");
exit(EXIT_FAILURE);
}
memset(buf, 0x00, 256);
while((numbytes = read(fd, buf, 255)) > 0){
printf("%d bytes read: %s", numbytes, buf);
memset(buf, 0x00, 256);
}
close (fd);
exit(EXIT_SUCCESS);
}
此外,在Linux系列的作業系統上,由於Linux的設計思想便是把一切裝置都視作檔案。因此,檔案描述子的存在提供了程式操作裝置的統一方法。
檔案描述子的概念存在兩大缺點:
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.