2014年7月18日星期五

多个进程打开同一个文件,各个进程得到的fd可能是一样的!

两个程序都用open打开同一个文件,然后把fd打印出来,一看,fd怎么是一样的?一下没想出来原因,还去stackoverflow上查了半天。下意识的以为fd是系统唯一的,一个进程占用了这个fd,另一个进程应该就不会有分配到这个fd了。而且看《Unix环境高级编程》里面给出的多进程打开一个文件的例子,fd是不一样的。当时就晕了。
后来在http://linux.die.net/man/3/open上仔细看了一下:
The open() function shall return a file descriptor for the named file that is the lowest file descriptor not currently open for that process
就是说open返回的fd是这个进程内未分配的最小文件描述符,好吧,这样就清楚了。

想到的其他问题:
1.一个进程如果多次打开同一文件,会得到不同的fd。
2.一个进程内多个线程打开一个文件会得到不同的fd。
3.对于记录锁,一个进程可以提出多个锁请求,即新锁可以替换老锁。一个进程多次打开一个文件,得到多个fd,再对这些fd上锁,这是ok的,即不会出现等锁的情况。
4.继续,一个进程创建了多个线程,多个线程打开一个文件,得到不同fd,众线程对各种的fd设置锁,是不会出现一个线程等待另一个线程的情况。所以,记录锁不能用于线程

没有评论:

发表评论