标准IO中要学习哪些相关函数呢?
文件IO:open 、close 、lseek 、read、write
标准IO:fopen、 fclose、fseek, rewind、读写函数比较多(分三类,全缓存、行缓存和无缓存)
1*、FILE *fopen (const char *path, const char *mode);
返回值:FILE * 文件流指针 为NULL的时候,表示打开失败。 类似于文件IO 中的文件描述符
FILE 定义:struct _IO_FILE,是结构体。在/usr/include/libio.h 中
包含读写缓存的首地址、大小、位置指针等。
文件IO:进程默认会打开三个文件描述符(0、1、2即 标准输入、标准输出、标准出错)
对应的标准IO:
标准的输入流:stdin 0
标准的输出流:stdout 1
标准的出错流:stderr 2
Mode:权限 相当于文件IO 的 flag
mode
b:二进制文件
r: 只读方式打开文件,文件必须存在;
w或a:只写方式打开文件,文件不存在则创建;区别: w等价O_TRUNC,a等价O_APPEND;
+:读写方式打开文件
例:以读写方式打开一个文件,该文件必须存在: r+ 以追加方式打开一个文件,若文件不存在,则创建: a或a+
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
int main(int argc,char *argv[])
{
int fd;
fd=open(argv[1],O_CREAT|O_RDWR,0777);
if(fd<0)
{
printf("cread %s file fail\n",argv[1]);
return -1;
}
printf("cread %s file suceess,fd=%d\n",argv[1],fd);
close(fd);
return 0;
}
运行结果:文件的权限为644
umask 为0022,其实使用fopen 创建的文件的初始权限为666,最终的权限为初始权限减去umask.
- int fclose(FILE *stream)
fclose()调用成功返回0,失败返回EOF,并设置errno
在该文件被关闭之前,刷新缓存中的数据。如果标准I / O库已经为该流自动分配了一个缓存,则释放此缓存。强制将库缓存中的数据写入内核中。