c语言打开文件不关闭的后果?

C员外 2007-08-18 04:48:48
最近接手改造一个scounix下c语言开发的后台项目,需要频繁打开文件,代码实现过程中文件打开后竟然没有关闭!
疑惑:这个后台系统一直运行一年多也没有问题,很少重启,打开文件量也很大(每天2000次左右)啊,也没有出现打开文件失败的日志,真的很纳闷!
难道操作系统自动关闭文件l了还是操作系统支持打开文件数很大?
...全文
1954 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
夏至夕陽 2007-08-20
  • 打赏
  • 举报
回复
只有一个进程打开一个文件,另一个进程又要打开这个文件的话才会报错吧
C员外 2007-08-20
  • 打赏
  • 举报
回复
代码确定没有close,整个系统就这个服务(单线程)在跑,在重复的读写.
因为打开的是重复的文件,打开过的文件句柄被冲掉了一直没有释放,内存泄漏.
应该会导致系统打开文件数目的极限。但我没有看到打开文件失败的日志,所以才奇怪(也许应用服务会周期性重启,这个就不知道了)。
linux打开文件数量能通过内核更改再编译或用ulimit更改,scounix刚手,还不怎么会用...
zylian 2007-08-19
  • 打赏
  • 举报
回复
补充楼上的,
你家可以有千万观众观看,但进去的却是只有一个

查看可以无限制,但一但修改就不行了.
iambic 2007-08-19
  • 打赏
  • 举报
回复
一个文件当然可以被几个进程同时访问,既然如此,被一个进程访问几次又有什么不行的。
不过如果你同时对文件读、写,会有同步的问题。
ForestDB 2007-08-19
  • 打赏
  • 举报
回复
呵呵,好玩。
个人觉得cceczjxy()讲的有点道理,要不就是关掉了,要不是系统资源开得非常大,这才没有memory leak出现。
Avoid 2007-08-19
  • 打赏
  • 举报
回复
这个就像你把家里门打开了。。。

没有贼那就没啥鸟是了。。。
shjmqqc111 2007-08-19
  • 打赏
  • 举报
回复
这个fopen只是缓冲打开的.不是直接的文件读写.在说只是读.没有写.应该不会出现问题.
但如果有写.不出问题才是怪事了.
cceczjxy 2007-08-18
  • 打赏
  • 举报
回复
fp = fopen("pp.txt","r");
fread(......);
ft = fopen("pp.txt","r");


你样当然可以了,fp,和ft不是同一个流.只是打开的文件相同而已.

楼主仔细找找,应该有其它地方关闭它.
要不就是系统内设置的进程的最大打开文件数设置的非常大,
按你说的,至少要大于800000.

这样也不是不可以.
ulimit 你可以看一下,你的设置.
gqhonesty 2007-08-18
  • 打赏
  • 举报
回复
刚才在VC下式了下,居然没有问题哈!
FILE *fp,*ft;
fp = fopen("pp.txt","r");
fread(......);
ft = fopen("pp.txt","r");
if(ft==NULL)
{
printf("error!\n");
}
居然没有看到error字样,我靠!
gqhonesty 2007-08-18
  • 打赏
  • 举报
回复
C可以不关闭文件,再打开吗?
好像不行把!

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧