资源预览内容
第1页 / 共20页
第2页 / 共20页
第3页 / 共20页
第4页 / 共20页
第5页 / 共20页
第6页 / 共20页
第7页 / 共20页
第8页 / 共20页
第9页 / 共20页
第10页 / 共20页
亲,该文档总共20页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
Linux C 库函数 C 库函数的文件操作实际上是独立于具体的操作系统平台的,不管是 DOS、Windows、Linux、Vxworks 中都是这些函数。 1.文件打开函数 fopen():原型是FILE *fopen(const char *path,const char *mode);path -表示文件名和路径名,可以是绝对路径,也可以是相对路径。比如:fp=fopen(“/tmp/file“,“r+“);fp=fopen(“././file“,“w+“); mode-打开方式.由 r(read),w(write),a(append),t(text),b(banary),+六个字符组成函数的返回值为文件的流操作指针。 对于 UNIX 系统,t 和 b 没有区分,用那个都一样,也可以不写其他的有 6 中组 合 “r”只读,文件必须存在; “w”只写,若文件不存在则创建之,已存在则清空内容再写; “a“只能追加数据,文件不存在就创建之; “r+“允许读和写,文件必须存在; “w+“读和写,文件不存在则创建,存在就清空再写; “a+“读和追加数据,文件不存在就创建; 打开如果出错,fopen 将返回一个空指针值 NULL,注意要加打开是否成功判 断。if(fp=fopen(“./file“,“r“)=NULL)perror(“failed to open ./file“);exit(1);fopen 里的所谓当前目录是指:进程工作时的目录 2.文件关闭函数 fclose() 文件使用完,最好是要关闭,原型是int fclose(FILE *fp);fclose 与 fopen 配对调用。 3.出错处理函数 perror() C 标准库和 UNIX C 库的很多系统函数在错误返回时将错误原因记录在一个全 局变量 errno 中,一般用函数 perror()将 errno 解释成字符串输出。原型:void perror(const char *s);每次调用系统函数错误返回后,要马上检查错误原因,perror()只处理最近一次 错误产生的 errno. 4.字符读写函数 fgetc()/fputc() 原型:int fgetc(FILE *stream);int fputc(int c,FILE *stream);在 fgetc 函数中,文件必须是可读的。fgetc 返回的是一个字符(char 型)。每 读一个字符,自动向后移动一个字节。但申明的是 int,这是指该字符的 ASCII 码。 fputc 输入的也是字符 c 的 ASCII 码。 5.字符串读写函数 fgets()/fputs() 原型:char *fgets(char *s,int size,FILE *stream);int fputs(const char*s,FILE *stream);fgets 中, s 是缓冲区首地址,size 是缓冲区长度,fgets 从 stream 中一次最多读 取以n结尾的一行到 s 中。并且在末尾自动添加一个0; fputs 中,s 是以0结尾的字符串,fputs 将该字符串写入文件 stream,但并不写 入结尾的0.fputs 不需要以n结尾。/*2 *复制文本文件 file1 的内容到 file23 * 2009.3.25 yunbo034 */5 #include /头文件在头文件在 linux 系统系统 /usr/include/下下6 #include7 #include8 9 int main(void)10 11 FILE *fp1,*fp2;12 char ss512;13 14 if(fp1=fopen(“file1“,“r“)=NULL)15 perror(“fail to open file1“);16 exit(1);17 18 19 if(fp2=fopen(“file2“,“a+“)=NULL)20 perror(“fail to open file2“);21 exit(1);22 23 24 for(;fgets(ss,10,fp1)!=NULL;)25 fputs(ss,fp2);26 27 fclose(fp1);28 fclose(fp2);29 30 return 0;31 linux-fopen-fclose-fread-fwrite 等函数等函数 clearerr(清除文件流的错误旗标) 相关函数 feof 表头文件 #include 定义函数 void clearerr(FILE * stream); 函数说明 clearerr()清除参数 stream 指定的文件流所使用的错误旗标。 返回值 fclose(关闭文件) 相关函数 close,fflush,fopen,setbuf 表头文件 #include 定义函数 int fclose(FILE * stream); 函数说明 fclose()用来关闭先前 fopen()打开的文件。此动作会让缓冲区内的数据写入文件 中,并释放系统所提供的文件资源。 返回值 若关文件动作成功则返回 0,有错误发生时则返回 EOF 并把错误代码存到 errno。 错误代码 EBADF 表示参数 stream 非已打开的文件。 范例 请参考 fopen()。 fdopen(将文件描述词转为文件指针) 相关函数 fopen,open,fclose 表头文件 #include 定义函数 FILE * fdopen(int fildes,const char * mode); 函数说明 fdopen()会将参数 fildes 的文件描述词,转换为对应的文件指针后返回。参数 mode 字符串则代表着文件指针的流形态,此形态必须和原先文件描述词读写 模式相同。关于 mode 字符串格式请参考 fopen()。 返回值 转换成功时返回指向该流的文件指针。失败则返回 NULL,并把错误代码存在 errno 中。 范例 #include main() FILE * fp =fdopen(0,”w+”); fprintf(fp,”%sn”,”hello!”); fclose(fp); 执行 hello! feof(检查文件流是否读到了文件尾) 相关函数 fopen,fgetc,fgets,fread 表头文件 #include 定义函数 int feof(FILE * stream); 函数说明 feof()用来侦测是否读取到了文件尾,尾数 stream 为 fopen()所返回之文件指 针。如果已到文件尾则返回非零值,其他情况返回 0。 返回值 返回非零值代表已到达文件尾。 fflush(更新缓冲区) 相关函数 write,fopen,fclose,setbuf 表头文件 #include 定义函数 int fflush(FILE* stream); 函数说明 fflush()会强迫将缓冲区内的数据写回参数 stream 指定的文件中。如果参数 stream 为 NULL,fflush()会将所有打开的文件数据更新。 返回值 成功返回 0,失败返回 EOF,错误代码存于 errno 中。 错误代码 EBADF 参数 stream 指定的文件未被打开,或打开状态为只读。其它错误代码 参考 write()。 fgetc(由文件中读取一个字符) 相关函数 open,fread,fscanf,getc 表头文件 include 定义函数 nt fgetc(FILE * stream); 函数说明 fgetc()从参数 stream 所指的文件中读取一个字符。若读到文件尾而无数据时便 返回 EOF。 返回值 getc()会返回读取到的字符,若返回 EOF 则表示到了文件尾。 范例 #include main() FILE *fp; int c; fp=fopen(“exist”,”r”); while(c=fgetc(fp)!=EOF) printf(“%c”,c); fclose(fp); fgets(由文件中读取一字符串) 相关函数 open,fread,fscanf,getc 表头文件 include 定义函数 har * fgets(char * s,int size,FILE * stream); 函数说明 fgets()用来从参数 stream 所指的文件内读入字符并存到参数 s 所指的内存空间, 直到出现换行字符、读到文件尾或是已读了 size-1 个字符为止,最后会加上 NULL 作为字符串结束。 返回值 gets()若成功则返回 s 指针,返回 NULL 则表示有错误发生。 范例 #include main() char s80; fputs(fgets(s,80,stdin),stdout); 执行 this is a test /*输入*/ this is a test /*输出*/ fileno(返回文件流所使用的文件描述词) 相关函数 open,fopen 表头文件 #include 定义函数 int fileno(FILE * stream); 函数说明 fileno()用来取得参数 stream 指定的文件流所使用的文件描述词。 返回值 返回文件描述词。 范例 #include main() FILE * fp; int fd; fp=fopen(“/etc/passwd”,”r”); fd=fileno(fp);printf(“fd=%dn”,fd); fclose(fp); 执行 fd=3 fopen(打开文件) 相关函数 open,fclose 表头文件 #include 定义函数 FILE * fopen(const char * path,const char * mode); 函数说明 参数 path 字符串包含欲打开的文件路径及文件名,参数 mode 字符串则代表着 流形态。 mode 有下列几种形态字符串: r 打开只读文件,该文件必须存在。 r+ 打开可读写的文件,该文件必须存在。 w 打开只写文件,若文件存在则文件长度清为 0,即该文件内容会消失。若文 件不存在则建立该文件。 w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。 若文件不存在则建立该文件。 a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存 在,写入的数据会被加到文件尾,即文件原先的内容会被保留。 a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件 存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 上述的形态字符串都可以再加一个 b 字符,如 rb、w+b 或 ab等组合,加入 b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。不过在 POSIX 系统,包含 Linux 都会忽略该字符。由 fopen()所建立的新文件会具有 S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)权限,此文 件权限也会参考 umask 值。 返回值 文件顺利打开后,指向该流的文件指针就会被返回。若果文件打开失败则返回 NULL,并把错误代码存在 errno 中。 附加说明 一般而言,开文件后会作一些文件读取或写入的动作,若开文件失败,接下来 的读写动作也无法顺利进行,所以在 fopen()后请作错误判断及处理。 范例 #include main() FILE * fp; fp=fopen(“noexist”,”a+”); if(fp= =NULL) return; fclose(fp); fputc(将一指定字符写入文件流中) 相
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号