I'm opening lots of files with fopen() in VC++ but after a while it fails.
Is there a limit to the number of files you can open simultaneously?
I'm opening lots of files with fopen() in VC++ but after a while it fails.
Is there a limit to the number of files you can open simultaneously?
The C run-time libraries have a 512 limit for the number of files that can be open at any one time. Attempting to open more than the maximum number of file descriptors or file streams causes program failure. Use _setmaxstdio to change this number. More information about this can be read here
Also you may have to check if your version of windows supports the upper limit you are trying to set with _setmaxstdio. For more information on _setmaxstdio check here
Information on the subject corresponding to VS 2015 can be found here
In case anyone else is unclear as to what the limit applies to, I believe that this is a per-process limit and not system-wide.
I just wrote a small test program to open files until it fails. It gets to 2045 files before failing (2045 + STDIN + STDOUT + STDERROR = 2048), then I left that open and ran another copy.
The second copy showed the same behaviour, meaning I had at least 4096 files open at once.
Yes there are limits depending the access level you use when openning the files. You can use _getmaxstdio to find the limits and _setmaxstdio to change the limits.
I don't know where Paulo got that number from.. In windows NT based operating systems the number of file handles opened per process is basically limited by physical memory - it's certainly in the hundreds of thousands.
Came across the same problem, but using Embarcadero C++-Builder of RAD Studio 10.2. The C-runtime of that thing doesn't seem to provide _getmaxstdio or _setmaxstdio, but some macros and their default limit is much lower than what is said here for other runtimes:
stdio.h:
/* Number of files that can be open simultaneously
*/
#if defined(__STDC__)
#define FOPEN_MAX (_NFILE_)
#else
#define FOPEN_MAX (_NFILE_)
#define SYS_OPEN (_NFILE_)
#endif
_nfile.h:
#if defined(_WIN64)
#define _NFILE_ 512
#else
#define _NFILE_ 50
#endif
Yes, there is a limit.
The limit depends on the OS, and memory available.
In the old D.O.S. the limit was 255 simultaneuously opened files.
In Windows XP, the limit is higher (I believe it's 2,048 as stated by MSDN).