[Search for users]
[Overall Top Noters]
[List of all Conferences]
[Download this site]
Title: | DIGITAL UNIX (FORMERLY KNOWN AS DEC OSF/1) |
Notice: | Welcome to the Digital UNIX Conference |
Moderator: | SMURF::DENHAM |
|
Created: | Thu Mar 16 1995 |
Last Modified: | Fri Jun 06 1997 |
Last Successful Update: | Fri Jun 06 1997 |
Number of topics: | 10068 |
Total number of notes: | 35879 |
OSF/1 3.2A
AlphaServer2100
A customer sent me a problem report. fseek return error.
% cat sample.c
#include <stdio.h>
#include <stdlib.h>
typedef struct logdata {
int muno;
int ovno;
int time;
} LOGDATA;
main()
{
FILE *fp;
int ret = 1;
int data[3];
long offset;
offset = -sizeof(LOGDATA);
fp = fopen("test.fil","r+");
if (fp != NULL) {
while( ret == 1) {
ret = fread(data,sizeof(LOGDATA),1,fp);
if (ret == 1) {
printf("read data = %d %d\n",data[0],data[1]);
printf(" file pos = %d\n",ftell(fp));
printf("OFFSET %d\n",offset);
ret = fseek(fp,offset,SEEK_CUR);
if(ret == 0) {
ret = fwrite(data,sizeof(LOGDATA),1,fp);
if(ret == 1) {
} else {
perror("fwrite");
}
}else{
perror("fseek");
}
}else{
perror("fread");
}
}
ret = fclose(fp);
}else{
perror("test.fil");
}
}
% cc sample.c
% ./a.out
read data = 875770417 943142453
file pos = 12
OFFSET -12
read data = 909456435 809056311
file pos = -8168
OFFSET -12
fseek: Invalid argument
%
But he add ftell() after fwrite() ,program is everything fine.
% cat sample2.c
#include <stdio.h>
#include <stdlib.h>
typedef struct logdata {
int muno;
int ovno;
int time;
} LOGDATA;
main()
{
FILE *fp;
int ret = 1;
int data[3];
long offset;
offset = -sizeof(LOGDATA);
fp = fopen("test.fil","r+");
if (fp != NULL) {
while( ret == 1) {
ret = fread(data,sizeof(LOGDATA),1,fp);
if (ret == 1) {
printf("read data = %d %d\n",data[0],data[1]);
printf(" file pos = %d\n",ftell(fp));
printf("OFFSET %d\n",offset);
ret = fseek(fp,offset,SEEK_CUR);
if(ret == 0) {
ret = fwrite(data,sizeof(LOGDATA),1,fp); <- add this line
if(ret == 1) {
} else {
perror("fwrite");
}
}else{
perror("fseek");
}
}else{
perror("fread");
}
}
ret = fclose(fp);
}else{
perror("test.fil");
}
}
% cc smaple2.c
% ./a.out
file pos = 12
OFFSET -12
file pos = 12
read data = 909456435 809056311
file pos = 24
OFFSET -12
file pos = 24
read data = 943142453 842084409
file pos = 36
OFFSET -12
file pos = 36
read data = 809056311 875770417
file pos = 48
OFFSET -12
file pos = 48
Can you tell me what's wrong here ?
Thanks in advice,
Eiji Kobayashi/CSC/MCS/DECJAPAN
T.R | Title | User | Personal Name | Date | Lines |
---|
9929.1 | found an answer | TKTV20::KOBAYASHI_E | | Mon May 26 1997 03:45 | 11 |
| Sorry,I checked reference manual, And I found a answer.
After a call to the fseek() function,I had to call fflush() before call to
the
fseek() again.
Eiji Kobayashi/CSC/MCS/DECJAPAN
|