IO:
标准IO : 库函数(ANSIC 系统调用+缓冲区,可移植性很强,执行效率较高)
例如:printf scanf fopen fclose fread fwrite fgetc fputc fgets fputs
文件IO:系统调用(posix 从用户空间进入到内核空间的一次过程,效率比较低,每发生一次系统调用,就会调用一次内核)
例如: open close read write
标准IO fopen的用法:
FILE *fopen(const char*pathname, const char *mode)
功能:打开一个文件
参数:
pathname : 打开的路径和名字 (字符指针)
mode: 打开的方式
r: 以只读的方式打开文件,将光标定位在文件的开头
r+: 以读写的方式打开文件,将光标定位在文件的开头
w: 以只写的方式打开文件,如果文件不存在就创建,如果文件存在就清空文件
w+: 以读写的方式打开文件,如果文件不存在就创建,如果文件存在就清空文件,将光标定位在文件的开头
a: 以只写的方式打开文件,如果文件不存在就创建,如果文件存在就将光标定位在文件的结尾
a+: 以读写的方式打开文件,如果文件不存在就创建,如果文件存在就将光标定位在文件的结尾
返回值:成功返回FILE的指针 失败返回NULL
错误码的原理: 应用层的 fopen 会调用到底层的sys_open ,底层sys_open执行失败的时候,会将错误码给程序中的 error变量,可以通过 error这个变量获取底层的错误信息。
错误码在内核中是负数,return -ENOENT;
perror: 直接打印错误信息,并且结尾自动补\n