首页 > 试题广场 >

Linux下两个进程可以同时打开同一个文件,这时如下描述错误

[不定项选择题]
Linux下两个进程可以同时打开同一个文件,这时如下描述错误的是:
  • 两个进程中分别产生生成两个独立的fd
  • 两个进程可以任意对文件进行读写操作,操作系统并不保证写的原子性
  • 进程可以通过系统调用对文件加锁,从而实现对文件内容的保护
  • 任何一个进程删除该文件时,另外一个进程会立即出现读写失败
  • 两个进程可以分别读取文件的不同部分而不会相互影响
  • 有缓冲的情况下,一个进程对文件长度和内容的修改另外一个进程可以立即感知
正确答案
D
答案解析
一个进程删除该文件后,另一个进程可以继续操作,直到退出以后,才找不到该文件。
发表于 2018-04-18 11:48:13 回复(0)
更多回答
选太绝对的应该没错
发表于 2022-05-16 20:25:56 回复(0)
应该选D, 一般删除都是文件索引,如果两个文件同时打开同一个文件,一个线程执行删除操作,只要另一个线程不退出,就可以继续对该文件进行操作,一旦退出才找不到该文件的索引节点而报错。
发表于 2015-09-01 09:10:27 回复(5)
D
发表于 2015-08-28 09:19:07 回复(0)
立即感知好假
发表于 2015-08-24 15:42:18 回复(4)
发表于 2015-10-30 10:32:40 回复(3)
内核中,对应于每个进程都有一个文件描述符表,表示这个进程打开的所有文件。文件描述表中每一项都是一个指针,指向一个用 于描述打开的文件的数据块———file对象,file对象中描述了文件的打开模式,读写位置等重要信息,当进程打开一个文件时,内核就会创建一个新的file对象。需要注意的是,file对象不是专属于某个进程的,不同进程的文件描述符表中的指针可以指向相同的file对象,从而共享这个打开的文件。file对象有引用计数,记录了引用这个对象的文件描述符个数,只有当引用计数为0时,内核才销毁file对象,因此某个进程关闭文件,不影响与之共享同一个file对象的进程.
http://www.cnblogs.com/zhaoyl/archive/2012/05/15/2502010.html
编辑于 2016-06-06 21:40:33 回复(1)
D,文件的删除是根据引用技术操作的,如果引用技术为0,则会删除
发表于 2015-08-24 23:46:36 回复(4)
Linux和widows不一样,文件在被操作时是可以被删除的。
在操作文件的时候,文件会写入的是内存,删除的是硬盘中的文件,只有当所有进程停止对文件的调用,文件才算彻底被删除。
发表于 2022-06-11 21:08:47 回复(0)
DF
发表于 2015-08-24 23:39:39 回复(0)
如果文件修改后 ,另一个进程能立即感知,那么这两个进程不就是在通信吗?
好像只有父子进程之间才能这样吧。。
发表于 2020-03-10 17:11:09 回复(0)
差点以为这两个进程是父子关系,没审题啊
发表于 2019-07-11 20:19:12 回复(0)
我就不信你们没有同时打开一个文件,D明显是错的
发表于 2017-06-16 09:46:33 回复(0)
提问:当两个进程打开同一个文件,同时对该文件做了写操作的时候,是否会将各自的操作记录留在属于自己的操作记录里面,等到两个进程的写操作结束时再将原文件修改,就像git对代码的修改一样
发表于 2016-09-06 12:20:48 回复(2)
参考:http://blog.chinaunix.net/uid-26548237-id-3046664.html
发表于 2015-08-30 09:53:57 回复(0)

A. 两个进程中分别打开同一个文件时,会生成两个独立的文件描述符(fd)。每个进程都会有自己的文件偏移量和文件状态信息。因此,这个描述是正确的。

B. 两个进程可以同时对文件进行读写操作。操作系统并不保证写操作的原子性,因此可能存在竞争条件和数据不一致的问题。这个描述是正确的。

C. 进程可以通过系统调用对文件加锁,实现对文件内容的保护。通过文件锁定机制,可以防止多个进程同时对同一文件进行写操作,从而避免数据冲突。这个描述是正确的。

D. 错误的描述是D。当一个进程删除一个文件时,并不会立即导致另外一个进程的读写失败。已经打开的文件描述符仍然有效,另外一个进程仍然可以使用该文件描述符进行读写操作,直到所有的文件描述符都关闭后,文件才会从文件系统中被删除。

E. 两个进程可以分别读取文件的不同部分,彼此之间不会相互影响。每个进程的文件偏移量是独立的,所以可以同时读取文件的不同位置。这个描述是正确的。

F. 在有缓冲的情况下,一个进程对文件长度和内容的修改,另外一个进程不一定可以立即感知。因为另一个进程可能还在使用缓存中的数据,直到缓存被刷新或者重新加载后才能感知到变化。因此,这个描述是错误的。

所以,错误的描述是D和F。

发表于 2023-11-14 17:27:42 回复(0)
A选项正确,每个进程在Linux中打开文件时,都会产生一个独立的文件描述符(file descriptor,简称fd),用于与该文件进行交互。文件描述符是一个非负整数,代表了进程与文件之间的连接;
B选项正确,如果没有明确的同步机制,操作系统并不保证对文件操作的原子性;
C选项正确,可以通过加锁这种同步机制来保证只有一个进程对文件进行操作;
D选项错误,进程删除文件,只是删除了文件系统目录中的文件引用,而不是真的将文件数据从磁盘中删除掉。当所有进程都没有了对该文件的引用,文件系统才会真正对该文件进行释放。因此当进程一对某个文件进行删除时,进程二不会马上读取失败,但之后的进程对该文件会读取失败;
E选项正确,读操作不会相互影响;
F选项错误,由于文件缓冲和操作系统的同步机制,一个进程对文件内容的修改,另外一个进程并不会立即感知到。原因是:文件内容的写入,并不是立即写入到磁盘,而是暂存到缓冲区里,等缓冲区写满,再同步写入到磁盘里,这样可以提高文件数据写入效率。因此一个进程对文件内容的修改,这份文件数据可能被暂存到缓冲区里,而这时另外一个进程并不会读取到最新的文件数据。

发表于 2023-08-27 12:42:14 回复(0)
我选了F,立即感知有点牵强吧,,,有大佬解惑么
但是D很明显也不对,一般删除都是文件索引,如果两个文件同时打开同一个文件,一个线程执行删除操作,只要另一个线程不退出,就可以继续对该文件进行操作,一旦退出才找不到该文件的索引节点而报错
发表于 2017-06-12 22:46:57 回复(0)
哪位大神对B解释一下,我不太明白“操作系统并不保证写的原子性”这是什么意思..
发表于 2015-09-28 10:42:11 回复(5)
选成正确的了,完美避开所有选项
编辑于 2023-12-30 21:39:03 回复(0)