当前位置: 技术问答>linux和unix
关键字:UNIX C FILE 标准IO
来源: 互联网 发布时间:2015-04-13
本文导语: 环境: UNIX C 问题: 如下CODE能从A.LOG读出第一行并写入B.txt,现在我想逐行读出写入应该怎么办? #include #include int main(int argc,char **argv) { FILE *p_f1,*p_f2; char buf[100]; p_f1=fopen("./A.LOG","r"); p_f2=fopen("./B.txt","w"); fgets(bu...
环境:
UNIX C
问题:
如下CODE能从A.LOG读出第一行并写入B.txt,现在我想逐行读出写入应该怎么办?
#include
#include
int
main(int argc,char **argv)
{
FILE *p_f1,*p_f2;
char buf[100];
p_f1=fopen("./A.LOG","r");
p_f2=fopen("./B.txt","w");
fgets(buf,100,p_f1);
fputs(buf,p_f2);
fclose(p_f2);
fclose(p_f1);
}
UNIX C
问题:
如下CODE能从A.LOG读出第一行并写入B.txt,现在我想逐行读出写入应该怎么办?
#include
#include
int
main(int argc,char **argv)
{
FILE *p_f1,*p_f2;
char buf[100];
p_f1=fopen("./A.LOG","r");
p_f2=fopen("./B.txt","w");
fgets(buf,100,p_f1);
fputs(buf,p_f2);
fclose(p_f2);
fclose(p_f1);
}
|
int fseek(FILE *stream,long offset,int whence);
在流上重新定位文件结构的位置。fseek设置与流stream相联系的文件指针到新的位置,新位置与whence给定的文件位置的距离为offset字节。
whence的取值必须是0,1或2中的一个,分别代表在stdio.h中定义的三个符号常量:
0是SEEK_SET,是文件开始位置;
1是SEEK_CUR,是当前的指针位置;
2时SEEK_END,是文件末尾。
调用了fseek之后,在更新的文件位置上,下一个操作可以是输入;也可以是输出。成功地移动了指针时,fseek返回0;出错或失败时返回非0值。
long int ftell(FILE *stream);
返回流stream中当前文件指针位置。偏移量是文件开始算起的字节数。出错时返回-1L,是长整数的-1值。
#include
#include
int main(int argc,char **argv){
FILE *p_f1,*p_f2;
static long pos;
int rc=0;
char buf[100];
p_f1=fopen("./A.LOG","r");
if(p_f1==NULL)
{
printf("can't open f1");
return -1;
}
p_f2=fopen("./B.txt","w");
if(p_f2==NULL)
{ printf("can't open f2");
return -3;
}
if(fseek(p_f1, pos, SEEK_SET)!=0){//置文件指针于文件首
printf("fseek error!");
return -2;
}
while (fgets(buf,100,p_f1)!=NULL)
{
fputs(buf,p_f2);
pos = ftell(p_f1); //获得当前指针距文件首的偏移量
fseek(p_f1, pos, SEEK_SET);//置当前指针
}
fclose(p_f2);
fclose(p_f1);
return 0;
}
在流上重新定位文件结构的位置。fseek设置与流stream相联系的文件指针到新的位置,新位置与whence给定的文件位置的距离为offset字节。
whence的取值必须是0,1或2中的一个,分别代表在stdio.h中定义的三个符号常量:
0是SEEK_SET,是文件开始位置;
1是SEEK_CUR,是当前的指针位置;
2时SEEK_END,是文件末尾。
调用了fseek之后,在更新的文件位置上,下一个操作可以是输入;也可以是输出。成功地移动了指针时,fseek返回0;出错或失败时返回非0值。
long int ftell(FILE *stream);
返回流stream中当前文件指针位置。偏移量是文件开始算起的字节数。出错时返回-1L,是长整数的-1值。
#include
#include
int main(int argc,char **argv){
FILE *p_f1,*p_f2;
static long pos;
int rc=0;
char buf[100];
p_f1=fopen("./A.LOG","r");
if(p_f1==NULL)
{
printf("can't open f1");
return -1;
}
p_f2=fopen("./B.txt","w");
if(p_f2==NULL)
{ printf("can't open f2");
return -3;
}
if(fseek(p_f1, pos, SEEK_SET)!=0){//置文件指针于文件首
printf("fseek error!");
return -2;
}
while (fgets(buf,100,p_f1)!=NULL)
{
fputs(buf,p_f2);
pos = ftell(p_f1); //获得当前指针距文件首的偏移量
fseek(p_f1, pos, SEEK_SET);//置当前指针
}
fclose(p_f2);
fclose(p_f1);
return 0;
}
|
fgets():若成功则返回buf,若已处于文件尾端或出错则为NULL。
这两句就是没到p_f1的文件末尾就将读出的内容写入p_f2。
这两句就是没到p_f1的文件末尾就将读出的内容写入p_f2。
|
Sorry, a mistake.
可以用fseek()和 ftell()来实现.
FILE *p_f1,*p_f2;
static long pos;
char buf[100];
p_f1=fopen("./A.LOG","r");
p_f2=fopen("./B.txt","w");
fseek (p_f1, pos, SEEK_SET);
while (fgets(buf,100,p_f1))
{
fputs(buf,p_f2);
pos = ftell (p_f1);
fseek (p_f1, pos, SEEK_SET);
}
fclose(p_f2);
fclose(p_f1);
可以用fseek()和 ftell()来实现.
FILE *p_f1,*p_f2;
static long pos;
char buf[100];
p_f1=fopen("./A.LOG","r");
p_f2=fopen("./B.txt","w");
fseek (p_f1, pos, SEEK_SET);
while (fgets(buf,100,p_f1))
{
fputs(buf,p_f2);
pos = ftell (p_f1);
fseek (p_f1, pos, SEEK_SET);
}
fclose(p_f2);
fclose(p_f1);