C++如何复制文件 * 指针
C++ how to copy a FILE * pointer
我在这里找到了解决方案 复制文件指针?
FILE *fp2 = fdopen (dup (fileno (fp)), "r");
但根据 http://man7.org/linux/man-pages/man2/dup.2.html,dup
创建的新文件描述符,它们引用相同的打开文件描述符,从而共享状态。那不是我想要的。我想创建一个全新的IO对象,它引用旧FILE *
指向的文件
有什么办法可以做到这一点吗?
加: 我实际上没有文件名。我正在对一个对象进行深度复制,其中包含一个打开的 FILE 指针,所以我也必须复制它。
我想创建一个全新的 IO 对象,它引用旧
FILE *
指向的文件
假设与原始FILE *
关联的文件具有某种形式的标识,该标识不同于访问它的 IO 对象。 对于常规文件和某些其他对象,这是正确的,但对于其他对象(如套接字和管道)是错误的。 因此,没有通用机制可以执行您的要求。
对于可以通过文件系统访问的对象的特殊情况,创建与同一文件关联的新 IO 对象的方法是通过文件的路径open()
或fopen()
文件。 这就是这些函数的作用。 没有标准方法可以从FILE *
或文件描述符编号中获取路径,但是在Linux上(因为您标记了该),您可以在/proc
中打开的文件条目上使用readlink()
,如此处所述。
请注意,即使对于常规文件,也不能保证readlink
方法有效。 特别是,如果打开原始文件的路径已被取消链接,则它将无法工作,实际上,在这种情况下,它可能会导致打开错误的文件。 您可以通过在旧文件描述符和新文件描述符编号上运行fstat()
来检查这一点 - 如果文件实际上相同,则它们将在同一主机设备上具有相同的索引节点编号。
相关文章:
- 为什么当我尝试将char输入到int时,文件指针会卡住
- fprintf 不打印到文件,当文件指针在其他地方声明时
- 如何从NTFS中的$ MFT文件访问文件的每个块的文件指针
- 尽管文件指针正确,但在fclose()期间的segfault
- 当调用FREAD()函数时,文件指针如何移动
- C++如何复制文件 * 指针
- 如何将文件描述符 (int fd) 转换为文件指针 ( 文件* fp )
- Visual Studio 2010 调用 _locking() 失败 (errno = 22) 当文件指针高于 (2^
- 如何在 c++ 中查找文件指针位置
- c++文件指针工作不正常
- 做一个popen(),将文件*指针放入fstream中,pclose()呢?
- 在Linux中,多个进程使用文件指针读取文件时使用的共享虚拟内存
- 无法声明文件指针数组
- 将文件指针重定向到C/C++中的字符串
- 如何检查文件指针/描述符/句柄是否关联到同一个文件/管道/终端
- 在记录中定位文件指针
- 流和文件指针移动
- 如何将文件指针移回一个整数
- C++ 如何使用文件指针以增量方式写入文件
- 为什么std::istream::read不根据读取的字节移动文件指针