多次flose(fp)会怎样?
来源:互联网 发布:php上传文件 绕过 编辑:程序博客网 时间:2024/05/16 23:02
能不能多次对同一个文件描述符调用fclose?答案是不行的。为啥不行,我们需要看看fclose到底干了什么
fclose关闭的是一个文件流,当调用fclose时,将会使用户态(C库)缓冲区中的数据刷新到内核区域(或通过socket发送,或者仅仅写回硬盘)。
于此同时,fclose会调用free来释放fp所指向的用户态buffer。
因此,如果多次调用fclose,会多次调用free来释放一块已经被释放的区域,而这个动作是危险的。
很多解释是说,因为一旦被释放之后,这块区域就属于未知区域。有可能系统已经把该区域分给了其他进程,所以不能多次fclose。
但是我看过Linux关于close的内核源码,发现并不是这样,当第一次调用close时,将会把对应的文件描述符数组flip[fp] = NULL。如果再调用close时,会在前面判断该项是否为null,如果为null,return -EINVAL;因此,多次调用fclose时会报错,但不会影响系统其他进程。
下一个问题:调用fclose之后,FILE *fp会变成NULL吗?不会,没有什么机制把fp置空的动作,只是这个时候fp所指向的区域已经不再有效。
0 0
- 多次flose(fp)会怎样?
- 你想怎样,就会怎样
- 多次注册事件会导致一个事件被触发多次
- Bootstrap 模态框多次显示后台会提交多次BUG
- 未来会怎样?
- 明天会怎样?
- 未来会怎样
- 美国政府关门会怎样?
- LVN_ITEMCHANGED通知会响应多次的问题
- LVN_ITEMCHANGED通知会响应多次的问题
- Android 多进程会多次初始化 Application
- 贷款被拒多次,会影响征信吗?
- 假如Intel不理会,欧盟会怎样?
- 怎么了,怎么办,会怎样???
- 未来的 PC 会怎样
- SaaS的明天会怎样
- 怎样创业才会成功
- 云端服务消失会怎样?
- iOS 统计项目的总行数
- Some third
- NDK开发时需要注意的问题
- java String转bigdecimal 精确两位小数点然后对转的数进行算法计算。
- 火狐保存的密码是明文的
- 多次flose(fp)会怎样?
- 程序的健壮性和鲁棒性
- android-----关于Menu
- android Button文本自动变大写解决办法
- 使用ArcGIS GP服务之三发布前的准备
- adb调试工具的了解
- 不要试图编写独立于容器类型的代码
- leetcode 217--Contains Duplicate
- MFC编程记录--图片控件类