檔案描述符是一個非負整數,用於標識開啟的檔案或 I/O 資源。它們在 UNIX/Linux 系統中是有限的,具體範圍和最大值依賴於系統的配置和實現。
1. 檔案描述符的基本範圍
最小值:檔案描述符從 0 開始。
-
0 通常表示標準輸入(stdin)。
-
1 通常表示標準輸出(stdout)。
-
2 通常表示標準錯誤輸出(stderr)。
最大值:系統中可用的檔案描述符的最大值通常由系統引數決定。在大多數 Linux 系統中,預設情況下,使用者程序可以開啟的檔案描述符數量限制為 1024,但可以透過命令或配置檔案進行修改。
2. 檢視和修改檔案描述符限制
-
檢視當前限制:
使用 ulimit 命令:
ulimit -n
這將顯示當前使用者可以開啟的最大檔案描述符數量。
自己試了下:
-
修改限制:
可以透過
ulimit -n [new_limit]
命令在當前會話中臨時修改限制,或在配置檔案(如 /etc/security/limits.conf)中進行永久性修改。
3. 舉一個例子
這個程式不能在Windows系統下執行,_SC_OPEN_MAX 和 sysconf 是 POSIX 標準的一部分,通常在 UNIX/Linux 系統中使用。
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
int main() {
// 獲取當前最大檔案描述符限制
long max_fd = sysconf(_SC_OPEN_MAX);
printf("Maximum file descriptors: %ld\n", max_fd);
// 開啟檔案並獲取檔案描述符
int fd = open("example.txt", O_RDONLY);
if (fd == -1) {
perror("Error opening file");
return 1;
}
// 使用檔案描述符進行操作...
close(fd); // 關閉檔案
return 0;
}
輸出如下: