У меня есть следующий код, в котором tmp
FILE *
не сохраняет предыдущую позицию fp
(равную 0). На самом деле он меняется вместе с fp
, когда я использую fseek()
.
Выход:
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
указывают на одно и то же, поэтому любое изменение одного указателя повлияет на другой. Если я правильно понимаю ваш вопрос, вы в основном хотите 2 разные позиции чтения/записи в одном и том же файловом потоке, верно? - person Drew McGowen   schedule 17.07.2014ftell
для получения позиции иfseek
для ее восстановления? - person Maciej Piechotka   schedule 17.07.2014tmp = fopen(name, "rb"); fseek(tmp, ftell(fp), SEEK_SET);
Но будьте очень, очень, очень осторожны - person Elias Van Ootegem   schedule 17.07.2014open
с флагомO_SYNC
, чтобы убедиться, что fd блокирует процесс. - person Elias Van Ootegem   schedule 17.07.2014