由于未知原因,fopen 在关闭前重复调用时似乎无法打开文本文件。
我的 C 程序使用多线程,每个线程处理一种类型的输出文本文件(每种类型 11 个),每种类型都在一个单独的文件夹中。为了写入大量数据,我需要维护在长时间执行期间在同一线程打开的这些文件。
为了更好地解释它,过程如下:
1- 线程 #1 启动并在一个文件夹中创建和写入 11 个文件。
2- 在不关闭之前的文件的情况下,线程 #2 启动并在不同的文件夹中创建和写入另外 11 个文件。
3- 其他两个线程同理。
4- 最后,当所有需要的文件都已创建并且所有线程都已完成(主线程除外)时,所有文件都将关闭。
然而,令人惊讶的是,open 确实能够同时处理所有这些文件。有人对 fopen 有这个问题的提示吗?不知道是跟多线程有关,还是跟fopen同时处理的最大文件数有关。
我在 Windows 平台上使用 Borland 编译器。
最佳答案
问题不太可能出在 fopen
上。 fopen
在下面使用 open
并且打开文件的最大数量很可能与 open
具有相同的限制。
我的猜测是您在其他地方有错误,很可能超出了数组边界。
如果您不使用任何 Windows 特定功能,您总是可以 valgrind
它在 Linux 上。
如果您无法移植代码,您可以对错误进行二进制搜索。例如,注释掉一半写入文件的代码,看看问题是否仍然存在。如果不是,则问题可能在被注释掉的部分。如果不是,则问题出在未评论的部分。
请注意上面的“可能”一词。如果您的代码导致未定义的行为,则您不能依赖该行为。即使是有缺陷的代码也可以正常运行。
关于c - C 程序中的 open 与 fopen(多线程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18700785/