C语言-文件操作
总结一下今天下午学习的内容:
13.1
文件通常是硬盘或固态硬盘上的一段已命名储存区,在使用C语言与文件进行交互时,有“文本模式”和“二进制模式”两种。对于UNIX和Linux来说这两种模式没有任何区别,但对于其他系统来说,在储存区域的划分上有所不同。
I/O(输入输出)可以选择两个标准,一个是操作系统携带的底层I/O,一个是C程序携带的标准I/O包,后者具有可移植性。
每一个C程序都会自动打开三个文件,标准输入、标准输出和标准错误输出,其中第三个会将错误信息发送到显示屏上,是一种标准的写法。
对于标准I/O除了携带大量的文件操作函数可供使用外,还有一个优势就是“输入和输出都是缓冲的”。
13.2
exit将控制权交给操作系统,return将控制权交给上一级(即退出函数),除了在递归型主函数中以外,exit和return的效果是一样的;
疑惑:书上说UNIX和Lniux只有一种文件类型,但查到的信息不是这样……
fopen打开文件时,有多种模式,其中追加符'+'表示扩展权限,'x'表示“安全模式”(我自己命名的),'b'表示二进制。
fp所指向的是一个数据对象。
文件的输入输出函数中使用stdout进行标准输入输出。
如果getc()读到了文件结尾,将返回EOF
scanf/printf与fscanf/fprintf之间的区分是根据和内存之间的关系而来的。
如果磁盘已满、移动磁盘或者出现I/O错误,都会导致fclose()函数失败;
标准的打开文件方式:
if((in = fopen(name,"w")) == NULL) { fprintf(stderr, "Can't creat output file.\n"); exit(EXIT_FALLURE); }
其中的exit(EXIT_FALLURE)表示退出程序,并关闭所有文件;
13.3
同时操作文件数是有限制的,范围一般是10-20。
在编写程序的时候,经常使用类似#define MAX 41的代码来定义常量,目的是为了日后的修改方便。
空字符(字符串的终止标志)与空格字符不一样。
回车符和换行符不一样,在windows下输入大键盘中的回车键,将输入回车‘\r’和换行'\n'。
gets()函数涉及到越界问题,在正式的程序编辑中最好不要出现,可以使用fgets()代替它,但因为fgets在处理换行符时与gets的差异问题,在CPP中使用了一个自编写的s_gets(),而C11中自带一个可扩展的get_s(),具体的使用就要涉及到编译器的选择了……经过一番调查,还是要上手VS,使用Clang进行编译。
13.5
每次函数对文件指针进行操作之后,移动的是文件指针指向的文件结构数据体中的某个指针。
fseek()和ftell()用来移动和操作文件指针。
fgetpos()和fsetpos()是对大型文件进行操作的函数。
13.7
在这里记录一些文件操作函数,不常用,但放这里给自己提个醒儿……
ungetc——将执行字符放回输入流
fflush——更新流
setvbuf——创建一个供标准I/O函数替换使用的缓冲区。
fread和fwrite在二进制下对数据进行操作,参数需要注意一下,考试时比较有用:
size_t fwrite(const void * restrict ptr, size_t size, size_t nmemb, FILE * restrict fp);
这个还挺方便的……
feof——当上一次输入调用时检测到文件结尾时返回一个非零值(等会儿找个程序试一下)
ferror——当读或写出现错误,ferror返回一个非零值,否则返回0。
以上。