[问题] 有需要 close file descriptor 吗?

楼主: gn00618777 (非常念旧)   2021-07-26 20:55:03
请问有需要在离开 process 时, close fd 吗?
我想这大家一定都会说是。
开档时, 核心分配一块 file structure,fd 就是每个 process 内的 fd table
的索引,fd 就会指向某个文件的 inode。 当每一次指向(引用),就会引用+1
当完全没process引用了此文件,内存就会被销毁?
想请问
1 核心分配的 file structure 是 heap memory 吗?
2 请问 process exit 时,引用会消失吗? 如果引用会消失,那有必要还要 close(fd)?
感谢
作者: Schottky (顺风相送)   2021-07-27 02:20:00
看平台而定。如果你在写冷气机或遥控直升机的程式,有可能不会自动帮你 close fd
作者: Lipraxde (Lipraxde)   2021-07-27 08:20:00
OS 在 process 结束回收资源的时候会帮你关吧,就像乱丢垃圾妈妈会帮忙收的感觉?
作者: CGS0 (Mike Chen)   2021-07-27 13:18:00
保持好的习惯 ,会让你写大程式时 ,减少很多除错的时间
作者: cuteSquirrel (松鼠)   2021-07-27 13:45:00
最好养成有开有关的习惯
作者: Qbsuran (Qbsuran)   2021-07-27 15:19:00
那你觉得为什么不用关
作者: d630200x (DOGE)   2021-07-28 00:04:00
养成习惯吧
作者: sunneo (艾斯寇德)   2021-07-28 00:45:00
要关啊 假设今天把fd fileop 真正mapping到自动车跟车库车子跑一跑,车库没关,那就有差了
作者: b0920075 (Void)   2021-07-28 01:46:00
trace 了一下 linux 5.10.1 开启 regular file 会在 fs/file_table.c 的 __alloc_file 用 kmem_cache_zalloc分配 object , kernel 的动态分配内存不确定有没有称为 heap 的惯例(usermode 下看 process memory maps是直接就写 heap , kernel 印象没看过这种说法?)exit syscall 就会call filp_close 关档案引用减一,以上是 5.10.1 版本的 kernel如果是linux 然后 process 又是正常关掉 linux 是会帮你收好,但其他 os 就不好说了吧
作者: isaacting (2312312)   2021-07-28 12:02:00
有些东西没有跑os的,不关会造成严重的错误我曾经在mcu上对sd卡读写,有api类似开关档,写了之后没有下关的指令,会让sd card读写造成错误
作者: Killercat (杀人猫™)   2021-07-28 16:26:00
通常关一关比较好
作者: pponywong (pony)   2021-07-28 19:42:00
同上面讲的 fd 不见得是档案 char kernel driver 都有可能用fd来操作 kernel driver不一定保证帮你处理resource release的操作 我就遇过系统中直接发signal去砍掉程式 造成kernel panic的
作者: alex70266 (小眼)   2021-07-28 23:11:00
想不到什么理由不关啦,更何况这是确保安全的习惯难道有了免治马桶以后就不用买卫生纸吗XD
作者: askacis (ASKA)   2021-07-28 23:59:00
不关fd, 则 process 会占用 一个 fd号码,系统跑久之后你就会发现为什么没办法开档了,因为系统的 fd都用光光了很多系统灵异现象都是这样来的,记得用 lsof 查谁占住了一堆 fd
作者: b0920075 (Void)   2021-07-29 01:51:00
如果是 process 一直跑但是不关 fd 达到给 process 的fd 上限后开下一个就会失败,但 fd 只跟 process 有关吧,跟系统上跑的其他 process 应该是独立不相干的?
作者: jacky1989   2021-07-30 00:37:00
建议保持好习惯,有fopen 就有fclose
作者: ibmibmibm (BestSteve)   2021-08-10 09:46:00
如果你在写飞弹的程式,那可能发射两分钟后就有终极的全系统资源回收,那就不用关了,不然还是都记得关吧
作者: youtuuube000 (小孩)   2021-08-12 14:43:00
问题是process很可能会长期跑啊..一直开着到时fd爆掉怎办
作者: ArdenCho (Arden)   2021-09-28 22:49:00
关一关吧,养成一个好习惯

Links booklink

Contact Us: admin [ a t ] ucptt.com