2013-07-29 7 views

Odpowiedz

3

Widać maksymalny dozwolony graniczne otwarte pliki (kernel), wykonując:

cat /proc/sys/fs/file-max 

Quote from kernel docs:

Wartość w file-max oznacza maksymalną liczbę Plik- że uchwyty Jądro Linux przydzieli. Gdy otrzymasz wiele komunikatów o błędach dotyczących wyczerpania się uchwytów plików, możesz chcieć zwiększyć ten limit.

+0

granica pokazując 1201326 ale fopen otwarcie tylko 1022 – naren

+3

To limit użytkowników zapewne;) Zobacz' ulimit -n' – nullpotent

+3

FOPEN_MAX nie jest limitem. Daje ci * minimalną liczbę strumieni, które gwarancje wdrożenia mogą być otwarte jednocześnie * – jh314

11

Implementacja jest wymagana do zapewnienia FOPEN_MAX w <stdio.h>. Jest to minimalna liczba plików, których gwarancje wdrożenia można otworzyć jednocześnie. Możesz być w stanie otworzyć więcej, ale jedynym sposobem, aby to sprawdzić, jest test.

Należy pamiętać, że limit jądra jest oddzielony od tego - określa liczbę plików, które można (potencjalnie) otworzyć przy pomocy open, creat i innych wywołań systemu operacyjnego. Standardowa biblioteka implementacji C może (i często będzie) narzucać własny limit (np. Statycznie przydzielając tablicę o wartości FILE). Teoretycznie największą liczbą, jaką można otworzyć, jest minimum limitu nałożonego przez jądro i implementację biblioteki - ale limit jądra to prawie zawsze (dużo) wyższy.

Ogólnie rzecz biorąc, jeśli Ci na tym zależy, jesteś prawdopodobnie coś jednak nie tak.

1

Jest zdefiniowany przez standard POSIX. Usunięcie go powoduje problemy z przenośnością.Dodatkowo to makro jest wymienione w glibc.info (przynajmniej w redhat-7.1). Proszę odnieść się do poniższego linku OPEN_MAX not defined in limits.h.

0

Ten kod powinien podawać maksimum na twoim komputerze. Utwórz plik "test" w tym samym folderze i uruchom go. Zasadniczo wciąż otwiera plik, dopóki nie będzie już mógł.

# include <assert.h> 
# include <stdio.h> 
# include <stdlib.h> 
# include <unistd.h> 
# include <sys/types.h> 
# include <sys/stat.h> 
# include <sys/wait.h> 
# include <string.h> 
# include <fcntl.h> 


int main(){ 
    int t; 

    for(;;){ 
    t = open("test", O_RDONLY); 
    if (t < 0){ 
     perror("open"); 
     exit(1); 
    } 
    printf("%d: ok\n", t); 
    } 
} 
Powiązane problemy