C 如何保持文件指针在另一个文件指针中的位置?

C 如何保持文件指针在另一个文件指针中的位置?,c,file,file-pointer,C,File,File Pointer,我有以下代码,其中tmp文件*没有保留fp的先前位置(即0)。当我使用fseek()时,它实际上会随着fp而改变 输出: fp=0 fp=40 tmp=40 如何使tmp保持原始位置 main() { FILE *fp,*tmp; char *name; name=getfilename(); if((fp=fopen(name,"wb"))==NULL) { puts("\n

我有以下代码,其中
tmp
文件*
没有保留
fp
的先前位置(即0)。当我使用
fseek()
时,它实际上会随着
fp
而改变

输出:

fp=0 fp=40 tmp=40
如何使
tmp
保持原始位置

main()
{
        FILE *fp,*tmp;
        char *name;

        name=getfilename();

        if((fp=fopen(name,"wb"))==NULL)
        {
                puts("\n CAN'T OPEN FILE FOR SAVING...\n");
                return ;
        } 

        printf("fp=%ld",ftell(fp));

        tmp=fp;

        fseek(fp,sizeof(int)*10,SEEK_SET);

        printf("fp=%ld tmp=%ld",ftell(fp),ftell(tmp));
}

两个指针都指向相同的文件结构。如果愿意,只需打开文件两次,在这种情况下,指针将完全独立。

两个
tmp
fp
都指向同一个对象,因此对一个指针的任何修改都将“影响”另一个指针。如果我正确理解您的问题,您基本上希望在同一文件流中有两个不同的读/写位置,对吗?是的..对。这怎么办?@matts使用
ftell
获取位置并
fseek
恢复位置怎么样?取决于系统(即非windows):
tmp=fopen(名称,“rb”);fseek(tmp、ftell(fp)、SEEK_集)
但是要非常非常小心如果支持(即linux),您可以使用
open
O_SYNC
标志打开文件,以确保fd阻止该过程