怎样用描述符重新打开文件?

dongpy 2008-12-11 09:56:35
如题,已经打开了某个文件,得到文件描述符(int)或文件指针(FILE*)。

但是文件名已不可知,请问怎样通过文件描述符或文件指针重新打开该文件?
...全文
142 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
atiansk2006 2008-12-15
  • 打赏
  • 举报
回复
学习
xzdwfwt111 2008-12-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 threeleafzerg007 的回复:]
引用 4 楼 dongpy 的回复:
问题是这样的:主线程打开了一个文件,得到描述符fd(全局变量)。

然后在另一个线程,也要独立操作该文件,但是文件名没保存,只保存了描述符。

因此想问能否通过描述符,再次打开该文件。


你依靠文件名 打开描述符后 就没有必要保存文件名了。 直接使用就可以了。
因为 描述符是 进程相关的 不是 线程相关的。 当然 描述符 要作为全局变量让别的线程访问到。
[/Quote]
要主意下防止竞争!
yangzhifu 2008-12-13
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 benbenxiaoluchi 的回复:]
问题是,现在有2个线程,各自独立访问该文件,就不能共用描述符,否则文件偏移量会乱。

-----要想不乱,就用文件锁。 各自访问该文件没啥意义。
[/Quote]
同意楼上的,你需要加一个二维信号量,防止竞争!
benbenxiaoluchi 2008-12-13
  • 打赏
  • 举报
回复
问题是,现在有2个线程,各自独立访问该文件,就不能共用描述符,否则文件偏移量会乱。

-----要想不乱,就用文件锁。 各自访问该文件没啥意义。
dongpy 2008-12-12
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 cceczjxy 的回复:]
如果有文件描述符号
可以使用dup2,dup来获得一个新的文件描述符号,和重新打开一遍的效果是一样的,
如果想通过文件描述符得到一个FILE*指针,那就使用fdopen,

如果已经有了个FILE *指针,想获得文件描述符,那就使用fileno函数
[/Quote]

dup只复制文件描述符项,还是指向原来的文件对象,不是重新打开文件。
也不能满足多个线程同时访问的要求。
dongpy 2008-12-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 threeleafzerg007 的回复:]
引用 4 楼 dongpy 的回复:
问题是这样的:主线程打开了一个文件,得到描述符fd(全局变量)。

然后在另一个线程,也要独立操作该文件,但是文件名没保存,只保存了描述符。

因此想问能否通过描述符,再次打开该文件。


你依靠文件名 打开描述符后 就没有必要保存文件名了。 直接使用就可以了。
因为 描述符是 进程相关的 不是 线程相关的。 当然 描述符 要作为全局变量让别的线程访问到。
[/Quote]

问题是,现在有2个线程,各自独立访问该文件,就不能共用描述符,否则文件偏移量会乱。
outblue 2008-12-11
  • 打赏
  • 举报
回复
open的目的就是返回文件描述符,既然你已经得到了,为什么还要再次打开呢?
bshawk 2008-12-11
  • 打赏
  • 举报
回复
既然已经打开,为什么还要重新打开?

如果你要直到文件描述符对应的文件,那么用下面这个命令看看吧:
ls -l /proc/<PID>/fd/<FID>

<PID>:打开文件的进程号;
<FID>:文件描述符;

good luck!
cceczjxy 2008-12-11
  • 打赏
  • 举报
回复
如果有文件描述符号
可以使用dup2,dup来获得一个新的文件描述符号,和重新打开一遍的效果是一样的,
如果想通过文件描述符得到一个FILE*指针,那就使用fdopen,

如果已经有了个FILE *指针,想获得文件描述符,那就使用fileno函数
threeleafzerg007 2008-12-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 dongpy 的回复:]
问题是这样的:主线程打开了一个文件,得到描述符fd(全局变量)。

然后在另一个线程,也要独立操作该文件,但是文件名没保存,只保存了描述符。

因此想问能否通过描述符,再次打开该文件。
[/Quote]

你依靠文件名 打开描述符后 就没有必要保存文件名了。 直接使用就可以了。
因为 描述符是 进程相关的 不是 线程相关的。 当然 描述符 要作为全局变量让别的线程访问到。
  • 打赏
  • 举报
回复
你最好之前用一个全局的变量保存文件名,那另一个线程不就可以操作该文件了。难道这样不好吗?
dongpy 2008-12-11
  • 打赏
  • 举报
回复
问题是这样的:主线程打开了一个文件,得到描述符fd(全局变量)。

然后在另一个线程,也要独立操作该文件,但是文件名没保存,只保存了描述符。

因此想问能否通过描述符,再次打开该文件。
SenerityChzr 2008-12-11
  • 打赏
  • 举报
回复
已经打开了文件?不是通过文件名打开的吗?

23,110

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧