C
Chen ShuSheng
HI,
I am now study a segment of codes:
------------------------
printf("%p\t",fp); /*add by me*/
fseek(fp, 0L, SEEK_END); /* go to end of file */
printf("%p\t",fp); /*add by me*/
last = ftell(fp);
cout<<"last="<<last<<"\t"; /*add by me*/
-------------------------
My question is: 1. why fp do not change after function "fseek"?
2. If fp is not change after "fseek", why last is not ZORE?
3. How does "fseek" return Current position?
It will be much preciated if you can help me. Thanks.
Below is the whole code:
----------------
/* reverse.c -- displays a file in reverse order */
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#define CNTL_Z '\032' /* eof marker in DOS text files */
#define SLEN 50
int main(void)
{
char file[SLEN];
char ch;
FILE *fp;
long count, last;
int test;
puts("Enter the name of the file to be processed:");
gets(file);
if ((fp = fopen(file,"rb")) == NULL)
{ /* read-only and binary modes */
printf("reverse can't open %s\n", file);
exit(1);
}
cout<<fp<<"\t";
fseek(fp, 0L, SEEK_END); /* go to end of file */
cout<<fp<<"\t";
last = ftell(fp);
cout<<"last="<<last<<"\t";
/* if SEEK_END not supported, use this instead */
/* last = 0;
while (getc(fp) != EOF)
last++;
*/
for (count = last- 1; count >= 0; count--)
{
test=fseek(fp, count, SEEK_SET); /* go backward */
ch = getc(fp);
/* for DOS, works with UNIX */
if (ch != CNTL_Z && ch != '\r')
putchar(ch);
/* for Macintosh */
/* if (ch == '\r')
putchar('\n');
else
putchar(ch)
*/
}
putchar('\n');
fclose(fp);
return 0;
}
-------------
I am now study a segment of codes:
------------------------
printf("%p\t",fp); /*add by me*/
fseek(fp, 0L, SEEK_END); /* go to end of file */
printf("%p\t",fp); /*add by me*/
last = ftell(fp);
cout<<"last="<<last<<"\t"; /*add by me*/
-------------------------
My question is: 1. why fp do not change after function "fseek"?
2. If fp is not change after "fseek", why last is not ZORE?
3. How does "fseek" return Current position?
It will be much preciated if you can help me. Thanks.
Below is the whole code:
----------------
/* reverse.c -- displays a file in reverse order */
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#define CNTL_Z '\032' /* eof marker in DOS text files */
#define SLEN 50
int main(void)
{
char file[SLEN];
char ch;
FILE *fp;
long count, last;
int test;
puts("Enter the name of the file to be processed:");
gets(file);
if ((fp = fopen(file,"rb")) == NULL)
{ /* read-only and binary modes */
printf("reverse can't open %s\n", file);
exit(1);
}
cout<<fp<<"\t";
fseek(fp, 0L, SEEK_END); /* go to end of file */
cout<<fp<<"\t";
last = ftell(fp);
cout<<"last="<<last<<"\t";
/* if SEEK_END not supported, use this instead */
/* last = 0;
while (getc(fp) != EOF)
last++;
*/
for (count = last- 1; count >= 0; count--)
{
test=fseek(fp, count, SEEK_SET); /* go backward */
ch = getc(fp);
/* for DOS, works with UNIX */
if (ch != CNTL_Z && ch != '\r')
putchar(ch);
/* for Macintosh */
/* if (ch == '\r')
putchar('\n');
else
putchar(ch)
*/
}
putchar('\n');
fclose(fp);
return 0;
}
-------------