0

この質問から続く:

Windowsでfopenを実行しようとすると、「開いているファイルが多すぎます」というエラーが表示されます。開いているファイルの数を分析しようとしましたが、あまり多くないようです。

しかし、Process Explorerを実行すると、「\ Device \ NamedPipe \ Win32Pipes.00000590.000000e2」、「\ Device \ NamedPipe \ Win32Pipes.00000590.000000e3」など、同じような名前の開いているハンドルが多数あることに気付きました。これらのハンドルのうち、「開いているファイルが多すぎます」を返して停止する前に、プログラムが実行した反復回数とまったく同じです。

私は答えを探しています、これらのハンドルは何ですか、そしてそれらは実際に「開いているファイルが多すぎます」エラーを引き起こす可能性がありますか?

私のプログラムでは、リモートドライブからファイルをロードし、TCP/IP接続を作成しています。これらの操作の1つで、これらのハンドルを作成できますか?

4

1 に答える 1

1

繰り返しのたびにパイプを 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 ランタイムでは、一度に開くことができるファイル ハンドルの数が指定されていることに注意してください。通常、この数は、オペレーティング システムが提供できる数よりもはるかに少なくなります。OS が提供するファイル ハンドルを使用するには、Win32/Win64 API 関数を使用する必要があります。

  • ファイルの作成
  • ReadFile
  • 書き込みファイル
  • GetFileSize
  • ハンドルを閉じる

OS が提供するファイル ハンドルは、FILE ではなく HANDLE 型です *

于 2010-03-15T11:30:19.923 に答える