c 和 文件 函数操作

1 篇文章 0 订阅

1.fopen()

原型:FILE * fopen(const char* filename, const char* mode);

说明:

fopen 实现三个功能:为使用而打开一个流;把一个文件和此流相互链接;给此流返回一个FILR指针。

parameter filename--指向要打开的文件名,

parameter mode--表示打开状态的字符串。

"r"以只读方式打开文件

"w"以只写方式打开文件

"a"以追加方式打开文件

"r+"以读/写方式打开文件,如果无文件出错的话

"w+"以读/写方式打开文件,如果无文件生成新文件的话

一个文件可以以文本模式或二进制模式打开,这两种的区别是:

在文本模式中回车被当成一个字符'/n',而二进制模式认为它是两个字符 0x0D,0x0A;如果再文件中读到0x1B,文本模式会认为这是结束符,也就是二进制模式不会对文件进行处理,而文本文件方式会按照一定的方式对数据做相应的转换。

系统默认以文本模式打开,可以修改全部变量_fmode的值来修改这个设置,例如 _fmode=O_TEXT;这就设置默认打开方式为文本模式;而_fmode=O_BINARY;则设置默认打开方式是二进制方式。

在模式字符串中指定打开的模式,如"rb"表示以二进制模式打开只读文件,"w+t"或"wt+"表示以文本模式打开读/写文件。

此函数返回一个FILE指针,所以申明一个FILE指针后不用初始化,而是用fopen()来返回一个指针并与一个特定的文件相连,如果失败,返回NULL。

2.fclose()

原型:int fclose(FILE* fp);

说明:fclose()的功能就是关闭用fopen()打开的文件。程序编写中,需要注意这两者的对应关系,否则,会造成数据丢失的情况。

如果成功,返回0;失败返回EOF。

3.fputc()

原型:int fputc(int c, FILE* stream);

说明:向流中写一个字符。成功返回这个字符;失败返回EOF。fputc会将参数c转为unsigned char 后传入参数stream指定的文件。


4.fgetc()

原型:int fgetc(FILE* stream);

说明:成功返回这个字符;失败返回EOF。


5.fseek()

原型:int fseek(FILE* stream, long offset, int whence);

说明:此函数一般用于二进制模式打开的文件中,功能是定位到流中指定的位置。

如果成功,返回0,参数offset是移动的字节数,whence是移动的基准,取值是:

符号常量值   基准位置

SEEK_SET0 文件开头

SEEK_CUR1 当前读写的位置

SEEK_END2 文件尾部

6.fputs()

原型:int fputs(const char* s, FILE* stream);


7.fgets()

原型:char* fgets(char* s, int n, FILE* stream);

说明:从流中读一行或指定个字符。从流中读取n-1个字符,除非读完一行,参数s是接受字符串。如果成功,返回s的指针,否则,返回NULL。


8.fprintf()

原型:int fprintf(FILE* stream, const char* format[, argument, ...]);

说明:按照格式输入到流,其用法和printf()相同,不过不是写到控制台,而是写到流。


9.fscanf()

原型:int fscanf(FILE* stream, const char* format[, address, ...]);

说明:从流中按格式读取,其用法和scanf()相同,不过不是从控制台读取,而是从流读取。


10.feof()

原型:int feof(FILE* stream);

说明:检测是否已到文件尾,是返回真;否则,返回0。


11.ferror()

原型:int ferror(FILE* stream);

说明:返回流最近的错误代码,可用clearerr()来清除。cleareer原型是void cleareer(FILE* stream);


12.rewind()

原型:void rewind(FILE* stream);

说明:把当前的读写位置回到文件开始。其实,本函数相当于fseek();


13.remove()

原型:int remove(const char* filename);

说明:删除文件。参数就是删除文件的文件名,成功返回0。


14.fread()

原型:size_t fread(void* ptr, size_t size, size_t n, FILE* stream);

说明:从流中读指定个数的字符。

参数ptr是保存读取的数据,

void* 的指针可用任何类型的指针来替换,如char*、int* 等等来替换;

size是每块的字节数;

n是读取的块数。

如果成功,返回实际读取的块数(不是字节数),本函数一般用于二进制模式打开文件中。

15.fwrite()

原型:size_t fwrite(const void* ptr, size_t size, size_t n, FILE* stream);

说明:与fread对应,向流中写指定的数据。

参数ptr是要写入的数据指针,void*的指针可用任何类型的指针来替换,如char*、int*等等来替换;

size是每块的字节数;

n是要写的块数。

如果成功,返回实际写入的块数(不是字节数),本函数一般用于二进制模式打开的文件中。


16.tmpfile()

原型:FILE* tmpfile(void);

说明:生成一个临时文件。以"w+b"的模式打开,并返回这个临时流的指针。如果失败,返回NULL。在程序结束后,这个文件会被自动删除。


17.tmpnam()

原型:char* tmpnam(char* s); 

说明:

     生成一个唯一的文件名,其实tmpfile()就调用了此函数,参数s用来保存得到的文件名,并返回这个指针。如果失败,返回NULL。


18.ftell()
原型:long ftell(FILE* fp);
说明:得到流式文件的当前读写位置,其返回值是当前读写位置偏离文件头部的字节。

19.memset() ---初始化申请的内存
原型:void *memset(void *s, char ch, size_t n);
说明:将s中前n个字节(typedef unsigned int size_t)用ch替换并返回s。

20.malloc() --- 向系统申请分配空间
原型:extern void *malloc(unsigned in num_bytes);
说明:如果分配成功,则返回被分配的内存地址(此存储区中的初始值不确定),否则返回空指针NULL。函数返回的指针一定要适当对齐,使其可以用于任何数据对象。

21.realloc() --- 新的大小一定要大于原来的大小,不然会导致数据丢失
原型:extern void *realloc(void *mem_address, unsigned int newsize);
说明:先判断当前的指针是否有足够的连续空间,如果有,扩大mem_address指向的地址,并且将mem_address返回;如果空间不够,先按照newsize指定的大小分配空间,将原有数据从头到尾拷贝到新分配的内存区域,而后释放原来mem_address所指向的内存区域(注意:原来指针是自动释放,不需要使用free),同时返回新分配的内存区域的首地址。即重新分配存储器块的地址。
           返回值:如果重新分配成功,则返回指向被分配内存的指针,否则,返回空指针NULL。

22.calloc() ---动态存储区中分配
原型:void *calloc(unsigned n, unsigned size);
功能:在内存的动态存储区中分配n个长度为size的连续空间,函数返回一个指向分配其实地址的指针;如果分配不成功,返回NULL。

23.free() --- 释放存储空间
原型:void free(void *ptr);
说明:内存块释放。释放ptr指向的存储空间。被释放的空间通常被送入可用存储区,以后可在调用malloc、realloc以及calloc函数来再分配。


已经测试过如下结论:
char ch = getchar();等价于char ch = fgetc(stdin);功能也等价于scanf("%c", &ch);也等价于fscanf(stdin, "%c", &ch);
putchar(ch)功能等价于printf("%c", ch);功能也等价于fputc(ch, stdout)功能也等价于发printf(stdout, "%c", ch);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值