int open("/etc/hosts",O_RDONLY); 此时若open成功则会返回一个 文件描述符, 例如是该进程打开的第一个文件 那么 就返回1 若出错则返回 -1 之后进程A 就可以利用如 open ,write 这样的读写函数 要求对 文件描述符 1相关的实际文件进行读写 当进程不再需要读写文件或 进程退出时 一般使用close函数关闭open File Descriptor close(1); -- 例如上面获得的 描述符是 1 ,这里代入1就可以关闭本进程对/etc/hosts的FD而在Linux/Unix上当一个文件被删除时,它只是简单地被"unlink"即删除一个硬链接hard link; 实际包含
Unix/Linux下删除Oracle控制文件Controlfile为什么实例Instance没有立即奔溃?
原创maclean_007 ©著作权
©著作权归作者所有:来自51CTO博客作者maclean_007的原创作品,请联系作者获取转载授权,否则将追究法律责任
绝大多数教科书或网络教材都告诉初学者, Oracle中丢失Controlfile控制文件会造成不可挽回的损失, Oracle Instance实例会立即崩溃crash。
但是实际很多同学在实际操作时发现,在Unix/Linux上删除所有的Controlfile控制文件 后 实例并不会在第一时间crash, 相反居然还可以顺利完成FULL checkpoint 。
这是为什么呢?
注意这个问题仅适用于Unix/Linux, 在Windows平台上不允许删除 已经被其他进程打开的文件。
究其根本原因是在Linux/Unix上Read 或 Write一个文件,进程都会打开一个与此文件相关联的 打开文件描述符 Open File Descriptors (a file descriptor (FD) is an abstract indicator for accessing a file. The term is generally used in POSIX operating systems.In POSIX, a file descriptor is an integer, specifically of the C type int.)
在C语言里 这样的一个File Descriptor以×××的形式出现, 举例来说:
进程A 在运行过程中 用 open 函数打开了一个文件/etc/hosts:
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章