文件的创建,打开与关闭
1 2 3 4 5 |
#include <stdio.h> FILE * fopen(const char *pach,const char *mode);//文件名,模式 int fclose(FILE *stream); |
- linux中对目录和设备的操作都是文件操作,文件分为普通文件,目录文件,链接文件和设备文件。
- fopen以mode的方式打开或创建文件,如果成功,将返回一个文件指针,失败则返回NULL
- fopen创建的文件的访问权限将以0666与当前的umask结合来确定
读写文件
1 2 3 4 5 |
#include <stdio.h> size_t fread(void *ptr,size_t size,size_t nmemb,FILE *stream); size_t fwrite(void *ptr,size_t size,size_t nmemb,FILE *stream); |
- fread从文件流stream 中读取nmemb个元素,写到ptr指向的内存中,每个元素的大小为size个字节
- fwrite从ptr指向的内存中读取nmemb个元素,写到文件流stream中,每个元素size个字节
- 所有的文件读写函数都从文件的当前读写点开始读写,读写完以后,当前读写点自动往后移动size*nmemb个字节
文件定位
1 2 3 4 5 6 7 8 9 |
#include <stdio.h> int feof(FILE * stream); //通常的用法为while(!feof(fp)) int fseek(FILE *stream, long offset, int whence);//设置当前读写点到偏移whence 长度为offset处 long ftell(FILE *stream); //用来获得文件流当前的读写位置 void rewind(FILE *stream); //把文件流的读写位置移至文件开头 èfseek(fp, 0, SEEK_SET); |
- feof判断是否到达文件末尾的下一个(注意到达文件末尾之后还会做一次)
- fseek设置当前读写点到偏移whence 长度为offset处,whence可以是:
- SEEK_SET (文件开头 –>0)
- SEEK_CUR (文件当前位置 –>1)
- SEEK_END (文件末尾 –>2)
- ftell获取当前的读写点
- rewind将文件当前读写点移动到文件头
格式化读写
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#include <stdio.h> int printf(const char *format, ...); //相当于fprintf(stdout,format,…); int scanf(const char *format, …); int fprintf(FILE *stream, const char *format, ...); int fscanf(FILE *stream, const char *format, …); int sprintf(char *str, const char *format, ...); // eg: sprintf(buf,”the string is;%s”,str); int sscanf(char *str, const char *format, …); |
- 以f开头的将格式化后的字符串写入到文件流stream中
- 以s开头的将格式化后的字符串写入到字符串str中
单个字符读写
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#include <stdio.h> int fgetc(FILE *stream); int fputc(int c, FILE *stream); int getc(FILE *stream); 等同于 fgetc(FILE* stream) int putc(int c, FILE *stream); 等同于 fputc(int c, FILE* stream) int getchar(void); 等同于 fgetc(stdin); int putchar(int c); 等同于 fputc(int c, stdout); |
- getchar和putchar从标准输入输出流中读写数据,其他函数从文件流stream中读写数据
字符串读写
1 2 3 4 5 6 7 |
char *fgets(char *s, int size, FILE *stream); int fputs(const char *s, FILE *stream); int puts(const char *s); è 等同于 fputs(const char *s, int size, stdout); char *gets(char *s); è 等同于 fgets(const char *s, int size, stdin); |
- fgets和fputs从文件流stream中读写一行数据;
- puts和gets从标准输入输出流中读写一行数据。
- fgets可以指定目标缓冲区的大小,所以相对于gets安全,但是fgets调用时,如果文件中当前行的字符个数大于size,则下一次fgets调用时,将继续读取该行剩下的字符,fgets读取一行字符时,保留行尾的换行符。
- fputs不会在行尾自动添加换行符,但是puts会在标准输出流中自动添加一换行符。
本文为原创文章,版权归Aet所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ Linux高性能服务器编程:TCP/IP协议族09/02
- ♥ X86_64汇编学习记述四08/09
- ♥ Shell学习总结一08/07
- ♥ Linux 高性能服务器编程:高性能服务器架构一12/05
- ♥ Linux_ 命令大全 磁盘维护03/16
- ♥ Shell 语法记述 第一篇09/04