您的位置:首页 > 运维架构 > Linux

Linux-C高级编程(1)文件操作(二)

2014-07-28 10:45 363 查看
四.常用库函数对文件的操作函数和实例

FILE不是结构体变量,它是用typedef定义的新类型名,

(1)fopen

FILE*fp;

fp=fopen(char*filename,char *mode)

打开一个文件名为filename的文件,打开方式为mode

FILE*fp;

if((fp=fopen(“filename”,”r”))==NULL)

{

printf(“filecannot be opened!\n”);

exit(0);

}

mode可为:rt,wt,at; rb,wb,ab; rt+,wt+,at+; rb+,wb+,ab+(也可以不加t,eg:r,w,a,默认的就是t即文本文件)

(2)fclose(FILE *stream)

关闭FILE结构体指针变量对应的文件成功返回0,否则返回非零

(3) char fgetc(FILE *stream)

从指定文件中读取一个字符,函数返回值就是该字符,若遇到文件结束符EOF则返回-1

(4) char fputc(char ch,FILE *stream)

将字符ch的值写入所指定文件的当前位置处,并将文件指针后移一位,函数的返回值是所写入的字符,出错返回-1遇到文件尾返回EOF.

eg1.

#include <stdio.h>

#include <stdlib.h>

int main(void)

{ FILE*fp;

charch;

if((fp=fopen("test1.txt","r"))==NULL)

{

printf("Thisfile cannot be opened!\n");

exit(1);

}

ch=fgetc(fp); /*注意换行符照样读出*/

while(ch!=EOF) /*这里也可以写成ch!=-1*/

{

putchar(ch);

ch=fgetc(fp);

}

fclose(fp);

return0;

}

(5)fegts(字符数组名,n,文件指针)

从文件指针指定文件中读取n-1个字符,并把它送到字符数组中,函数在读入字符串后将自动加上字符串结束标志’\0’,因此送到字符数组中的字符为n个,在读出n-1个字符之前,如遇到了换行符或EOF,则读出结束(也就是说只要n足够大,fgets读出的就是一行,并且’\n’也会读入到字符串),函数返回值就是字符数组的首地址。

注意:fgets(buff,512,stdin);表示用键盘输入数据到buff中,最多可接受512个字节,这个可以接收空格,而scanf函数不能接收空格

(标准输入stdin,标准输出stdout,标准错误输出stderr)

(6)fputs(字符串,文件指针)

把字符串写入文件指针指定的文件中,字符串可以是字符串常量,也可以是字符数组名

(7) int fscanf(FILE *stream,char*format,arg_list)

int fprintf(FILE*stream,char *format, arg_list)

按指定的格式对文件进行格式化的输入和输出,stream为流文件指针,其余两个参数与scanf和printf用法相同

(8) rewind(fp)

把文件内部的文件指针移到文件首

(9) fseek(文件指针,位移量,起始点)

把文件内部位置指针移到指定位置,“位移量”表示移动的字节数,要求位移量是long型数据,以便在文件长度大于64KB时不会出错,当用常量表示位移量时要加后缀“L”

起始点: 表示符号: 数字表示:

文件首 SEEK_SET 0

当前位置 SEEK_CUR 1

文件末尾 SEEK_END 2

(10) fread(buff,size,count,fp)

fwrite(buff,size,count,fp)

以数据块的形式读写文件,size是数据块的大小,count是执行一次函数读取或写入数据块的个数

eg2:

#include <stdio.h>

int main(void)

{

chars[40];

inti;

FILE*fp;

if((fp=fopen("test1.txt","r"))==NULL)

{

printf("openerror!\n");

return1;

}

fseek(fp,-10L,SEEK_END);

fread(s,2,5,fp);

for(i=0;i<10;i++)

putchar(s[i]);

fclose(fp);

return0;

}

eg3.

#include <stdio.h>

#define SIZE 4

struct student_type

{

charname[10];

intnum;

intscore;

}stud;

int main(void)

{

inti;

FILE*fp;

if((fp=fopen("stu_list","wb"))==NULL)

{

printf("openerror!\n");

return1;

}

printf("Inputdata please:\n");

for(i=0;i<SIZE;i++)

{

scanf("%s%d%d",stud.name,&stud.num,&stud.score);

fwrite(&stud,sizeof(structstudent_type),1,fp);

}

fclose(fp);

printf("Allright!\n");

return0;

}

(11) feof(fp)=1说明遇到文件尾,如果未遇到文件结尾feof(fp)=0;

eg4.

#include<stdio.h>

int main(void)

{

FILE *fp;

char ch;

if(NULL==(fp=fopen("test1.txt","r"))) /*注意这种写法*/

{

printf("open error!\n");

return 1;

}

ch=fgetc(fp);

while(!feof(fp)) /*这里也可以写成while(feof(fp)!=1)*/

{

putchar(ch);

ch=fgetc(fp);

}

fclose(fp);

return 0;

}

(12)long ftell(FILE *fp)

用于得到文件位置指针当前位置相对于文件首的偏移字节数

计算文件大小: long flen;

fseek(fp,0L,SEEK_END); /* 定位到文件末尾 */
flen=ftell(fp); /*
得到文件大小 */
(13)

调用系统库要用头文件<unistd.h>

调用标准库函数要用头文件<stdlib.h>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: