- 论坛徽章:
- 0
|
关于dup2()的疑问.
[quote]原帖由 "forest077"]我有一个不解的地方,就是freopen实现的功能也是把一个流重定向到另一个流去,它和dup、dup2的底层实现有什么不一样吗?[/quote 发表:
freopen 并不是把一个流定向到另一个流,而是把一个流对应到一个新的文件:
fd1 = dup (fd); fd1, fd 对应同一个文件, 但不能指定 fd1 的值。
dup2 (fd, fd1); fd1, fd 对应同一个文件,但可以指定 fd1的值,根据 kj501提供的资料, fd1 不能大于 1024
freopen ("xxx", "w", fp); 关掉 fp 对应的文件, 并打开文件 xxx, 指针 fp 的值不变。
在前两种情况中, 都有两个文件描述符出现, 但在第三种情况中, 只有一个文件指针。
使用 freopen (..., fp) 时, 原来 fp 对应的缓存写入, 关掉 fileno(fp), 寻找一个最小未用的文件描述符, 在其上打开新文件。也就是说, fp 值不变, 其指向的 FILE 结构仍然使用, 但 fileno (fp) 则有可能改变。 |
|