c - Unix 上 C 中的文件写入程序停留在 508 个打开/关闭周期

标签 c unix fopen read-write

我用 C 编写了一个程序,用于将一系列字符写入文件——5 个字母数字,后跟一个 (char)(30),一个“记录分隔符”字符,重复...没有换行符。该程序能够完美地循环,直到它到达第 508 次迭代——3048 个字符——然后死掉,说我无法访问该文件。

程序的结构需要在每次写入此序列时关闭并重新打开文件(该脚本是更大的伪数据库模拟模块的一部分),因此打开/写入/关闭有 508 个循环过程...在我开始剖析数据库模块代码之前(其中有很多行,所以如果可以避免的话我宁愿不必这样做),我想知道是否有人知道很少遇到的 read/Unix 中的写入限制,或者在特定时间限制下文件中的 3048 个字符的问题,或者文件中的 508 {30} 的问题,或者类似的简单(但难以捕捉)的问题。我尝试将读/写延迟几毫秒,以防它在关闭时意外打开,或者像那样绊倒自己,但没有雪茄。

最佳答案

508 可疑地接近 512,这是打开文件数的合理默认值。键入命令 ulimit -a 并查看施加了哪些限制。在我的 Fedora 15 系统上,1024 是每个进程打开文件数的限制:

[wally@lenovotower ~]$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 22084
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 1024
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

如果您的是 512,请确保程序确实正在关闭文件。在不显示一些代码的情况下,我们所能做的就是推测。

关于c - Unix 上 C 中的文件写入程序停留在 508 个打开/关闭周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12862371/

相关文章:

c - C如何从控制台和文件中读取中文

c - 在另一个.c中引用队列

PHP和CHMOD问题

linux - 确定文件系统是否以只读方式挂载的最佳 POSIX 方法

xml - 如何在不同路径的多个文件上使用 xmlstarlet?

c - 错误 c2059 : syntax error: constant in c while reading from a file

php - fclose 警告 : fclose(): supplied argument is not a valid stream resource

c - block 作用域标识符与静态存储持续时间的联系是什么?

c - 纯 C 中的 Knuth-Morris-Pratt 实现

c - 打开一个正在运行的二进制文件