📌  相关文章
📜  教资会网络 | UGC NET CS 2015 年 12 月 – III |问题 54(1)

📅  最后修改于: 2023-12-03 14:54:49.073000             🧑  作者: Mango

教资会网络 | UGC NET CS 2015 年 12 月 – III |问题 54

这道题目主要是考察程序员关于“文件系统的锁定”和“死循环”的认识。

题目描述

在操作系统中,文件系统锁(file system lock)是用来防止多个进程或线程访问相同文件的一种技术。考虑以下的C语言代码片段:

while (1) {
    open("file.txt", O_RDONLY);
}

该代码段可以无限制地运行,因为它一直尝试打开一个文件但没有关闭它。现在假设另一个进程在10秒钟后试图删除该文件,Windows中将发生什么?

A. 这将导致第二个进程无法删除文件。

B. 这将停止第一个进程中的无限循环并使第二个进程能够删除文件。

C. 这将不会发生,再次尝试删除该文件会使第二个进程等待直到第一个循环完成。

D. 此代码片段不会被编译。

答案

正确答案为B。

由于第一个进程一直在死循环中打开文件并且没有释放,因此第二个进程试图删除打开的文件时将无法完成,直到第一个进程终止或关闭该文件。在Windows中,第二个进程将等待10秒并响应失败,但在Unix和Linux系统中,第二个进程会立即响应失败并抛出EPERM错误。

因此,正确的解决方法是在第一个进程中关闭文件后退出循环。

while (1) {
    int fd = open("file.txt", O_RDWR);
    close(fd);
}

这样,第二个进程就可以成功地删除该文件。同时,这也解决了该代码片段的死循环问题。