毫无疑问,一个 file 结构体仅由 open 创建,由 realse 清除。通常我们以为 close 即为 realse ,实际并不是。
close 作为系统调用,会选择性调用 realse ,一旦调用 realse 将会清除整个 file 结构体,但例如 fork、dup 等调用会创建原进程副本,他们并不会调用 open ,并不会创建 file ,只会在原 file 结构体中某个计数变量加一。如果 fork、dup 产生的副本调用 close ,不会调用 realse,而会将计数变量减一,当这个计数变量变成 0 ,就会调用 realse (即副本和原本全部调用close)。
realse 做两件事:清除私有数据;关闭设备。
标签:副本,调用,file,close,open,realse From: https://www.cnblogs.com/hw-blog/p/17042661.html