Can “\ Device \ NamedPipe \\ Win32Pipes” maniglie causa “Troppi file aperti” errore?

StackOverflow https://stackoverflow.com/questions/2446600

  •  20-09-2019
  •  | 
  •  

Domanda

questa domanda :

Quando mi sto cercando di fare fopen su Windows, ottengo un errore "Troppi file aperti". Ho cercato di analizzare, il numero di file aperti che ho, e sembra che non troppo.

Ma quando ho eseguito Process Explorer, ho notato che ho molti handle aperti con nomi simili: "\ Device \ NamedPipe \ Win32Pipes.00000590.000000e2", "\ Device \ NamedPipe \ Win32Pipes.00000590.000000e3", ecc vedo che il numero di queste maniglie è esattamente uguale al numero delle iterazioni che il mio programma eseguito, prima di essere restituito "Troppi file aperti" e si fermò.

Sto cercando una risposta, che cosa sono queste maniglie, e potrebbe in realtà causare l'errore "Troppi file aperti"?

Nel mio programma che sto caricando i file da un'unità remota, e sto creando connessioni TCP / IP. Potrebbe una di queste operazioni creare queste maniglie?

È stato utile?

Soluzione

Stai ricordando di fclose () il vostro tubo di ogni tempo attraverso l'iterazione? (Vedi -> sotto).

Se non sono perdite tubi aperti.

for(i = 0; i < lotsOfIterations; i++)
{
    FILE *fp;

    fp = fopen(filename[i], "r");
    if (fp != NULL)
    {
        ... do work, etc

        fclose(fp); // finished with this file handle (add this line!)
    }
}

Tuttavia, se la vostra intenzione è di avere un sacco di handle di file aperti contemporaneamente, poi l'altra cosa da essere consapevoli è che il runtime C specifica in genere un certo numero di handle di file si può avere aperto in qualsiasi momento. Questo numero sarà tipicamente molto meno rispetto al sistema operativo è in grado di fornire. Per utilizzare il file del sistema operativo fornito maniglie è necessario utilizzare le funzioni API Win32 / Win64:

  • CreateFile
  • ReadFile
  • WriteFile
  • GetFileSize
  • CloseHandle
Non

handle di file del sistema operativo fornito sono di tipo handle di file *

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top