Windows Can"\设备\NamedPipe\\Win32Pipes";“处理原因”;“打开的文件太多”;错误?

Windows Can"\设备\NamedPipe\\Win32Pipes";“处理原因”;“打开的文件太多”;错误?,windows,file,handle,fopen,Windows,File,Handle,Fopen,继续自: 当我尝试在Windows上执行fopen时,会出现“打开的文件太多”错误。我试着分析,我有多少打开的文件,似乎没有太多 但当我执行Process Explorer时,我注意到我有许多具有类似名称的打开句柄:“\Device\NamedPipe\Win32Pipes.00000590.000000e2”、“\Device\NamedPipe\Win32Pipes.00000590.000000e3”等。我发现这些句柄的数量与我的程序返回之前执行的迭代次数完全相等“打开的文件太多”并停止

继续自:

当我尝试在Windows上执行fopen时,会出现“打开的文件太多”错误。我试着分析,我有多少打开的文件,似乎没有太多

但当我执行Process Explorer时,我注意到我有许多具有类似名称的打开句柄:“\Device\NamedPipe\Win32Pipes.00000590.000000e2”、“\Device\NamedPipe\Win32Pipes.00000590.000000e3”等。我发现这些句柄的数量与我的程序返回之前执行的迭代次数完全相等“打开的文件太多”并停止

我正在寻找答案,这些句柄是什么,它们是否真的会导致“打开的文件太多”错误


在我的程序中,我从远程驱动器加载文件,并创建TCP/IP连接。这些操作之一是否可以创建这些句柄?

在迭代过程中,您是否每次都记得关闭管道?(请参见下面的->)

如果不是的话,你是在泄漏打开的管道

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!)
    }
}
for(i=0;i
但是,如果您的目的是一次打开许多文件句柄,那么需要注意的另一件事是,C运行时通常指定可以在任何时候打开的文件句柄的数量。这个数量通常比操作系统能够提供的要少得多。要使用操作系统提供的文件句柄,您需要要使用Win32/Win64 API函数,请执行以下操作:

  • 创建文件
  • 读取文件
  • 写文件
  • 获取文件大小
  • 握把

操作系统提供的文件句柄类型为HANDLE而非file*

当打开的句柄用完时,打开的文件就会用完,例如,文件*由句柄支持。我不想一次打开很多文件句柄。我想找出问题的根本原因-我的程序中没有关闭哪些句柄。看起来这些都不是问题不是文件句柄,而是那些命名的管道。我试图了解它们是什么,它们与打开的文件、打开的套接字或其他任何东西有关。斯蒂芬:最终我发现我有一个管道没有关闭。谢谢。