檔案描述符

hisun9發表於2024-10-26

檔案描述符是一個非負整數,用於標識開啟的檔案或 I/O 資源。它們在 UNIX/Linux 系統中是有限的,具體範圍和最大值依賴於系統的配置和實現。

1. 檔案描述符的基本範圍

最小值:檔案描述符從 0 開始。

  • 0 通常表示標準輸入(stdin)。

  • 1 通常表示標準輸出(stdout)。

  • 2 通常表示標準錯誤輸出(stderr)。

最大值:系統中可用的檔案描述符的最大值通常由系統引數決定。在大多數 Linux 系統中,預設情況下,使用者程序可以開啟的檔案描述符數量限制為 1024,但可以透過命令或配置檔案進行修改。


2. 檢視和修改檔案描述符限制

  • 檢視當前限制:

    使用 ulimit 命令:

    ulimit -n
    

    這將顯示當前使用者可以開啟的最大檔案描述符數量。

    自己試了下:

    img

  • 修改限制:

    可以透過 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;
}

輸出如下:

img

相關文章