社区
Linux/Unix社区
帖子详情
怎样用描述符重新打开文件?
dongpy
2008-12-11 09:56:35
如题,已经打开了某个文件,得到文件描述符(int)或文件指针(FILE*)。
但是文件名已不可知,请问怎样通过文件描述符或文件指针重新打开该文件?
...全文
142
13
打赏
收藏
怎样用描述符重新打开文件?
如题,已经打开了某个文件,得到文件描述符(int)或文件指针(FILE*)。 但是文件名已不可知,请问怎样通过文件描述符或文件指针重新打开该文件?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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]
你依靠文件名 打开描述符后 就没有必要保存文件名了。 直接使用就可以了。
因为 描述符是 进程相关的 不是 线程相关的。 当然 描述符 要作为全局变量让别的线程访问到。
猫已经找不回了
2008-12-11
打赏
举报
回复
你最好之前用一个全局的变量保存文件名,那另一个线程不就可以操作该文件了。难道这样不好吗?
dongpy
2008-12-11
打赏
举报
回复
问题是这样的:主线程打开了一个文件,得到描述符fd(全局变量)。
然后在另一个线程,也要独立操作该文件,但是文件名没保存,只保存了描述符。
因此想问能否通过描述符,再次打开该文件。
SenerityChzr
2008-12-11
打赏
举报
回复
已经打开了文件?不是通过文件名打开的吗?
详解Linux下的文件标述符和文件指针
Linux下的文件标述符和文件指针 文件标识符: 首先我们来了解一下文件标识符是什么东西? 文件
描述符
是计算机科学中的一个术语,是一个用于表述只想文件的引用的抽象化概念。 在linux当中,每个进程会在进程控制块(PCB)当中保存着一份文件
描述符
表,文件
描述符
就是这个表的索引,每个表都有一个指 向已经
打开文件
的指针。 每个linux进程都应该有三个标准的文件
描述符
,对应三个标准流。 整数值 名称 (unistd.h)符号常量 (stdio.h)文件流 0 Standard input STDIN_FILENO stdin 1 Standard output STDOUT_FI
文件系统磁盘布局与I:O映射.docx
应用程序在访问文件时都会先
打开文件
,在内核中,对应每个进程,都会有一个文件
描述符
表表示这个进程打开的文件,但是用户程序不能直接访问内核中的文件
描述符
表,而只能使用文件
描述符
表的索引(一个整数),这些索引就被称为文件
描述符
Linux0.11内核main函数那些事
包括全局
描述符
表中的TSS0
描述符
和LDT0
描述符
的创建过程。与引导过程中全局
描述符
表及局部
描述符
表的创建过程构成了一个有机的知识块。在任务0从内核态切换到用户态过程中,可以学习到内核态堆栈与用户态堆栈概念...
文件
描述符
和
打开文件
之间的关系,文件
描述符
与exec()
文章目录文件
描述符
和
打开文件
之间的关系文件
描述符
与exec() 文件
描述符
和
打开文件
之间的关系 多个文件
描述符
指向同一
打开文件
。这些文件
描述符
可在相同或不同的进程中打开。 内核维护的3个数据结构 进程级的文件
描述符
表 系统级的
打开文件
表 文件系统的i-node表 针对每个进程,内核为其维护
打开文件
的文件
描述符
表。该表的每一条目都记录了单个文件
描述符
的相关信息,如下所示: 控制文件
描述符
操作的一组标志。 对
打开文件
句柄的引用。 内核对所有打开的文件维护有一个系统级的描述表格。也称之为
打开文件
表,并将表
每天进步一点点——Linux中的文件
描述符
与
打开文件
之间的关系
快速理解文件
描述符
与进程
打开文件
之间的关系
Linux/Unix社区
23,110
社区成员
74,506
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章