By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
448,796 Members | 1,168 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 448,796 IT Pros & Developers. It's quick & easy.

Question about change of "fp" in function "fseek"and "ftell"

P: n/a
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;
}
-------------


Aug 24 '06 #1
Share this Question
Share on Google+
3 Replies


P: n/a

Chen ShuSheng wrote:
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"?

fp is a pointer to a FILE structure. Which sounds a lot like "file
pointer", but it's not.
fp is the address in memory where the file info for the file is kept.
It will not change.

2. If fp is not change after "fseek", why last is not ZORE?
What's "ZORE" ?

3. How does "fseek" return Current position?
it does not, it returns success or failure. You have to call ftell to
get the position.

Aug 24 '06 #2

P: n/a

"Ancient_Hacker" <gr**@comcast.net>
??????:11*********************@75g2000cwc.googlegr oups.com...
>

> 2. If fp is not change after "fseek", why last is not
ZORE?

What's "ZORE" ?
Sorry, I mean "zero".

Aug 24 '06 #3

P: n/a

Chen ShuSheng wrote:
"Ancient_Hacker" <gr**@comcast.net>
??????:11*********************@75g2000cwc.googlegr oups.com...


2. If fp is not change after "fseek", why last is not
ZORE?
What's "ZORE" ?

Sorry, I mean "zero".
oh! I shudda guessed that. ftell() is telling you the file
position.

Aug 24 '06 #4

This discussion thread is closed

Replies have been disabled for this discussion.