O “ dispositivo nomeadopipe win32pipes” pode causar um erro de “muitos arquivos abertos”?

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

  •  20-09-2019
  •  | 
  •  

Pergunta

Continuando de essa questão:

Quando estou tentando fazer no Windows, recebo um erro "muitos arquivos abertos". Tentei analisar, quantos arquivos abertos eu tenho e parece não muito.

Mas quando executei o Process Explorer, notei que tenho muitas alças abertas com nomes semelhantes: " dispositivo nomeadopipe win32pipes.00000590.000000E2", " dispositivo nomeadopipe win32pipes.00000590.000000e3", etc., eu vejo que isso Destas alças é exatamente igual ao número de iterações executadas no meu programa, antes de retornar "muitos arquivos abertos" e parar.

Estou procurando uma resposta, quais são essas alças e eles poderiam realmente causar o erro "muitos arquivos abertos"?

No meu programa, estou carregando arquivos da unidade remota e estou criando conexões TCP/IP. Uma dessas operações poderia criar essas alças?

Foi útil?

Solução

Você está se lembrando de fclose () seu tubo a cada vez através da iteração? (Veja -> abaixo).

Caso contrário, você está vazando tubos abertos.

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!)
    }
}

No entanto, se sua intenção é uma das alças de arquivo abertas de uma só vez, a outra coisa a estar ciente é que o tempo de execução C normalmente especifica uma série de alças de arquivo que você pode abrir ao mesmo tempo. Esse número normalmente será muito menor que o sistema operacional é capaz de fornecer. Para usar as alças de arquivo fornecidas pelo sistema operacional, você precisará usar as funções da API Win32/Win64:

  • Createfile
  • ReadFile
  • Writefile
  • GetFilesize
  • CloseHandle

Os alças de arquivo fornecidas pelo sistema operacional são de tipo de tipo que não é arquivo *

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top