Unix上C语言中的文件编写程序停留在508个开/关循环

j6m*_*6m8 0 c unix fopen read-write

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

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

wal*_*lyk 6

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
Run Code Online (Sandbox Code Playgroud)

如果您的是512,请确保该程序实际上正在关闭该文件.没有显示一些代码,我们所能做的只是推测.

  • *508怀疑接近512*:是的,再加上stdin,stdout和stderr一路到达511.(即:x <512):-) (3认同)
  • @TallJeff:是的,添加程序可执行文件(在执行期间是一个打开的文件)使其达到512. (3认同)