能“\设备\ NamedPipe \\ Win32Pipes”处理事业“打开的文件太多”的错误?

从这个问题继续:

当我试图做的fopen在Windows上,我碰到一个“打开的文件太多”错误。 我试图分析我,有多少打开的文件都有,而且好像不是太多。

但是,当我执行的进程资源管理器,我发现我有很多打开处理与相似的名字:“\设备\ NamedPipe \ Win32Pipes.00000590.000000e2”,“\设备\ NamedPipe \ Win32Pipes.00000590.000000e3”等我看到数字这些手柄正好等于我的程序执行时,才返回“打开的文件太多”,并停止了迭代次数。

我在寻找一个答案,什么是这些手柄,并可能他们实际上造成了“打开的文件太多”的错误?

在我的节目,我从远程驱动器加载文件,和我创建的TCP / IP连接。 难道这些操作中的一个创造这些手柄?

--------------解决方案-------------

你记得要FCLOSE()的管道通过迭代每一次? (见 - 下文>)。

如果不是你打开漏水管道。

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

但是,如果你的目的是有很多的文件句柄一次打开,那么其他的事情要注意的是,C运行时通常指定一些文件句柄,你可以在任何一个时间开放。 这个数目通常将大量小于工作系统能够提供的。 使用附带的操作系统文件句柄,你将需要使用的Win32 / Win64的API函数:

  • 的CreateFile
  • ReadFile的
  • WriteFile的
  • GetFileSize
  • CloseHandle的

提供的操作系统文件句柄是类型HANDLE不是FILE *

分类:视窗 时间:2015-03-16 人气:7
本文关键词: 窗,文件,FOPEN,手柄
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.409 (s). 10 q(s)