首页 > 代码库 > C语言-文件操作

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。

 

以上。

 

C语言-文件操作