![]() |
1
1
在Linux中,没有通常与文件描述符相关联的错误状态。请参阅下面的链接。
但是,在我们继续之前,请不要使用
在我看来,最好稍微多疑一点,抓住意外的错误,而不是假设并可能默默地丢失数据。
对于下的内核伪文件
写入sysfs伪文件只需调用伪文件表示的可调参数的store()方法;请参阅 fs/sysfs/file.c:sysfs_kf_bin_write() . 根本没有状态记录。 (我们可以讨论一个可调函数是否可以记录以前的赋值尝试,并在此基础上改变它的行为,但是假设Linus Torvalds不会故意让这种事情发生。) “飞” 一点也不。)
一般来说,Linux内核不会在文件描述中存储任何错误状态。如果我们看看
fs/read_write.c:write()
(寻找
不管怎样,
(我们也可以看看
fs/file_table.c
关于Linux内核如何管理其内部文件描述符表(每个用户空间进程),
include/linux/fdtable.h:struct fdtable
对于描述符表本身,在
include/linux/fs.h:struct file
Linux文件描述的定义。这些结构中根本没有与“错误状态”相关的成员。但是,注意
(注意,在Linux中,syscalls返回一个整数。对于错误条件,此整数包含
消极的
错误号。考虑零值和正值
成功
. C库维护
同样,描述符中不会记录任何错误状态,并且每个操作都是单独发生的,与以前的操作没有关联(除了文件位置,在编写本文时,文件位置本身没有原子更新)。一些文件系统 能够 理论上,要跟踪操作,并保持与描述符相关联的内部错误状态,但是,再次声明,除非这是其他实现所遵循的文件系统的一个有案可稽的特性,否则Linux内核开发人员不太可能真的允许这样的事情发生。 重要的是要认识到Linux内核开发人员必须遵循两个关键原则(因为Linus强制这样做):公共内核接口(syscalls,/proc和/sys pseudofiles)在内核版本之间是稳定和兼容的(请参见 this LKML message )理智的实践胜过理论,即使有某种标准要求。例如,请参见 Torvalds' Wikiquotes ,或他在 Linux Kernel mailing list (马克信息镜; lkml.org here ). 我之所以相信他的意见,正如他自己所说, “因为他们知道他们不必” . 我(试着)自己做,这就是为什么这个答案希望包含足够的参考,以便您可以验证自己。 |
![]() |
2
0
写系统调用可能会失败,原因有很多——状态上没有任何持久性。 |
![]() |
Community wiki · C中有哪些耗时的操作? 1 年前 |
![]() |
Community wiki · 将所有处理器电源都投入到任务中 1 年前 |
![]() |
Community wiki · C++为C添加了什么?[已关闭] 1 年前 |
![]() |
Community wiki · 打印1到1000,不带循环或条件 1 年前 |