0

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

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

4

1 回答 1

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

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

于 2012-10-12T15:34:06.210 回答