2013-07-29 17 views
7

qual è il numero massimo di file che c fopen può aprire contemporaneamente in Linux?Numero massimo di file che possono essere aperti da c "fopen" in linux

+0

Breve e dolce. Dipende. –

+5

Dipende dal numero di file aperti da altri programmi e dal limite del kernel hardcoded, oltre a vari 'ulimit's. –

+1

RTFM: http://www.linuxhowtos.org/Tips%20and%20Tricks/ulimit.htm –

risposta

3

si può vedere il massimo consentito file aperti (limite del kernel) facendo:

cat /proc/sys/fs/file-max 

Quote from kernel docs:

Il valore nel file-max indica il numero massimo di file- maniglie che il Il kernel di Linux verrà assegnato. Quando ricevi un sacco di messaggi di errore relativi all'esaurimento degli handle di file, potresti voler aumentare questo limite.

+0

limite mostrando 1.201.326, ma l'apertura fopen solo 1022 – naren

+3

Questo è limite di utenti probabilmente;) Vedi' ulimit -n' – nullpotent

+3

FOPEN_MAX non è un limite. Ti dà il * numero minimo di flussi che le garanzie di implementazione possono essere aperte simultaneamente * – jh314

11

L'implementazione è richiesta per fornire FOPEN_MAX in <stdio.h>. Questo è il numero minimo di file che le garanzie di implementazione possono essere aperte contemporaneamente. Potresti essere in grado di aprire più di questo, ma l'unico modo per sapere che è quello di testare.

Si noti che il limite del kernel è separato da questo, che indica quanti file è possibile (potenzialmente) aprire con open, creat e altre chiamate del sistema operativo. La libreria standard dell'implementazione C può (e spesso lo farà) imporre il proprio limite (ad es. Allocando staticamente un array di FILE). In teoria, il numero più grande che puoi aprire è il minimo del limite imposto dal kernel e dall'implementazione della libreria, ma il limite del kernel è quasi uguale a sempre (molto) più alto.

In generale, se ci tieni a questo, sei probabilmente fare qualcosa di sbagliato però.

1

È definito dallo standard POSIX. Rimuoverlo causa problemi di portabilità. Inoltre, questa macro è menzionata in glibc.info (almeno in redhat-7.1). Si prega di fare riferimento al link sottostante OPEN_MAX not defined in limits.h.

0

Questo codice dovrebbe indicare il numero massimo sulla macchina. Crea un file "test" nella stessa cartella ed eseguilo. In pratica continua ad aprire il file fino a quando non può più.

# 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); 
    } 
} 
Problemi correlati