一个文件描述符,能否判断这个文件已经打开

时间:2022-06-25 23:53:18
UNIX环境编程(第三版)

最近在看这本书,书后面有个例子,要求自己实现dup2()函数的功能,不能使用fcntl()函数

现在有个问题,dup2()函数的第二个参数(文件描述符),如果已经打开了,那就必须先关闭他,我想问下,对于一个通过参数传入函数的文件描述符,如果判断他是否是已经打开?

9 个解决方案

#1


有人么 一个文件描述符,能否判断这个文件已经打开

#2


什么文件描述符
是fstream还是FILE*

#3


参考Linux源代码相关片断?

#4


引用 2 楼 shihengzhen101 的回复:
什么文件描述符
是fstream还是FILE*


int F;
F = open("/home/dv/zz.txt",O_REONLY|O_CREATE|O_TRUN);


用这种方式打开结果得到文件描述符F,当然这代码文件是打开的,现在我的麻烦事,假如就这样一个文件描述符,作为参数传入函数,在函数内如何判断这个文件是否处于打开状态,要求不适用fcntl()函数

#5


引用 3 楼 zhao4zhong1 的回复:
参考Linux源代码相关片断?

楼下帮忙看些,谢谢

#6


引用 3 楼 zhao4zhong1 的回复:
参考Linux源代码相关片断?

楼上的楼上,打错。。。。 一个文件描述符,能否判断这个文件已经打开

#7


参考Linux命令lsof的源代码?

#8


引用 4 楼 qazaq408 的回复:
Quote: 引用 2 楼 shihengzhen101 的回复:

什么文件描述符
是fstream还是FILE*


int F;
F = open("/home/dv/zz.txt",O_REONLY|O_CREATE|O_TRUN);


用这种方式打开结果得到文件描述符F,当然这代码文件是打开的,现在我的麻烦事,假如就这样一个文件描述符,作为参数传入函数,在函数内如何判断这个文件是否处于打开状态,要求不适用fcntl()函数

我感觉这个不容易办到吧,他就是一个指针,里面又不包含状态信息,把任意一个变量的地址传给他都是有效的,况且把一个已经关闭的文件指针传给你也是检测不出来的,如果不进行文件操作,是不太可能知道这个指针是否有效的,只能做简单的判断,比如是不是空指针

#9


引用 8 楼 shihengzhen101 的回复:
Quote: 引用 4 楼 qazaq408 的回复:

Quote: 引用 2 楼 shihengzhen101 的回复:

什么文件描述符
是fstream还是FILE*


int F;
F = open("/home/dv/zz.txt",O_REONLY|O_CREATE|O_TRUN);


用这种方式打开结果得到文件描述符F,当然这代码文件是打开的,现在我的麻烦事,假如就这样一个文件描述符,作为参数传入函数,在函数内如何判断这个文件是否处于打开状态,要求不适用fcntl()函数

我感觉这个不容易办到吧,他就是一个指针,里面又不包含状态信息,把任意一个变量的地址传给他都是有效的,况且把一个已经关闭的文件指针传给你也是检测不出来的,如果不进行文件操作,是不太可能知道这个指针是否有效的,只能做简单的判断,比如是不是空指针


文件描述符是个int值,并不是个指针。你把文件指针和文件操作符搞混了。(这也能搞混- -几天没睡觉了? 一个文件描述符,能否判断这个文件已经打开

#1


有人么 一个文件描述符,能否判断这个文件已经打开

#2


什么文件描述符
是fstream还是FILE*

#3


参考Linux源代码相关片断?

#4


引用 2 楼 shihengzhen101 的回复:
什么文件描述符
是fstream还是FILE*


int F;
F = open("/home/dv/zz.txt",O_REONLY|O_CREATE|O_TRUN);


用这种方式打开结果得到文件描述符F,当然这代码文件是打开的,现在我的麻烦事,假如就这样一个文件描述符,作为参数传入函数,在函数内如何判断这个文件是否处于打开状态,要求不适用fcntl()函数

#5


引用 3 楼 zhao4zhong1 的回复:
参考Linux源代码相关片断?

楼下帮忙看些,谢谢

#6


引用 3 楼 zhao4zhong1 的回复:
参考Linux源代码相关片断?

楼上的楼上,打错。。。。 一个文件描述符,能否判断这个文件已经打开

#7


参考Linux命令lsof的源代码?

#8


引用 4 楼 qazaq408 的回复:
Quote: 引用 2 楼 shihengzhen101 的回复:

什么文件描述符
是fstream还是FILE*


int F;
F = open("/home/dv/zz.txt",O_REONLY|O_CREATE|O_TRUN);


用这种方式打开结果得到文件描述符F,当然这代码文件是打开的,现在我的麻烦事,假如就这样一个文件描述符,作为参数传入函数,在函数内如何判断这个文件是否处于打开状态,要求不适用fcntl()函数

我感觉这个不容易办到吧,他就是一个指针,里面又不包含状态信息,把任意一个变量的地址传给他都是有效的,况且把一个已经关闭的文件指针传给你也是检测不出来的,如果不进行文件操作,是不太可能知道这个指针是否有效的,只能做简单的判断,比如是不是空指针

#9


引用 8 楼 shihengzhen101 的回复:
Quote: 引用 4 楼 qazaq408 的回复:

Quote: 引用 2 楼 shihengzhen101 的回复:

什么文件描述符
是fstream还是FILE*


int F;
F = open("/home/dv/zz.txt",O_REONLY|O_CREATE|O_TRUN);


用这种方式打开结果得到文件描述符F,当然这代码文件是打开的,现在我的麻烦事,假如就这样一个文件描述符,作为参数传入函数,在函数内如何判断这个文件是否处于打开状态,要求不适用fcntl()函数

我感觉这个不容易办到吧,他就是一个指针,里面又不包含状态信息,把任意一个变量的地址传给他都是有效的,况且把一个已经关闭的文件指针传给你也是检测不出来的,如果不进行文件操作,是不太可能知道这个指针是否有效的,只能做简单的判断,比如是不是空指针


文件描述符是个int值,并不是个指针。你把文件指针和文件操作符搞混了。(这也能搞混- -几天没睡觉了? 一个文件描述符,能否判断这个文件已经打开