c - C 程序中的 open 与 fopen(多线程)

标签 c multithreading fopen fclose

由于未知原因,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/

相关文章:

c - 遍历字符串并在 C 中用空格分隔输入

c - 为什么我的代码运行后显示空白?

C++11:确保 GUI 调用是从主线程进行的

python - 在函数中执行循环多处理的最快方法?

c - 用于 samba 共享的 Linux fopen() 语法

c - Linux:如何以编程方式检测进程中的空闲线程?

对字符串指针数组的打印过程感到困惑

c++ - 原子会遭受虚假存储吗?

c - 将指针数组传递给函数

c - 在 Mac 中使用 Xcode 进行 fopen