底层IO的操作过程

    xiaoxiao2021-03-25  71

    打开文件→改变文件位置→读写文件→关闭文件 文件的操作主要用到5个函数:open,read, write, lseek,close 0 文件描述符 文件操作符是一个非负整数,是一个用于描述被打开文件的索引值 一个进程从运行开始一般都会打开3个文件,标准输入,标准输出和标准出错函数。三个对应的描述符分别是0,1,2。一般第一个打开的文件是从3开始的。 1 文件的创建、打开与关闭 open函数用于打开或创建文件,在打开或创建文件时可指定文件的属性及用户的权限等各种参数

    #include<sys/types.h> #include<sys/stat.h> #include<fcantl.h> int open(const char *pathname,int flags) int open(const char *pathname,int flags,mode_t mode)

    …..所要用到的头文件 open函数返回,若成功返回文件描述符,若出错返回-1 pathname使用绝对路径或相对路径 flags是打开文件方式的参数,定义在fcntl.h文件中,O_RDONLY 只读,O_WRONLY只写,O_RDWR读写三个参数只能指定其中一个 mode是用于指定所创建文件的权限,使用|来组合 具体用法 S_I(R/W/X)(USR/GEP/OTH) 也可以用数字来代替 例如0777 umask 用户权限的掩码 默认为 0022 1 可以由命令更改 2可以在代码中更改 umask(0000);

    creat函数

    open(pathname,O_RDWR|O_CREAT|O_TRUNC,0666)

    O_RDWR 可读可写 O-CREAT 建立 0_TRUNC 覆盖 0666是存储权限 推荐使用2,调用open函数

    create函数返回,成功返回只写方式打开的文件描述符,出错为-1 pathname、mode含义与open相同 close函数

    #include <unistd.h> int close(int fd)

    close函数返回,成功返回0,出错-1 fd表示已打开文件的描述符 2、文件的定位

    当前文件位移量,非负整数,度量一个文件开始处计算的字节数,读写操作从当前文件位移量处开始 调用lseek函数显示的定位一个打开文件

    #include <sys/types.h> #include <unistd.h> off_t lseek(int fd,off_t offset,int whence)

    fd表示已打开文件的描述符 offset表示位移量的大小,单位字节,可正负 whence,解释参数offset大小,下面是取值和含义

    whence取值含义 SEEK_SET 将该文件的位移量设置为距文件开始处offset个字节 SEEK_CUR 将该文件的位移置量设置为其当前增加offset个字节,offset可为正或负 SEEK_END 将该文件的位移量设置为文件长度加offset个字节,offset可为正或负 小技巧 如果要得到文件的长度 lseek(fd ,0,SEEK_END); 文件的读写 read函数 打开文件读取数据

    #include <unistd.h> ssize_t read(int fd,void *buf,size_t count)

    返回,读到的字节数,若已到文件尾端返回0,出错返回-1 fd表示进行操作的文件描述符

    buf是一个指向缓冲区的指针

    count表示本次操作将要读取的数据字节数

    write函数 用write函数向打开文件写数据

    #include <unistd.h> ssize_t write (int fd,void *buf,size_t count)

    返回,成功为已写的字节数,出错为-1 fd操作的文件描述符

    buf指向缓冲区的指针,放入要写入文件的数据

    count表示本次操作写入文件的数据字节数 参考http://blog.csdn.net/del1214/article/details/7202372#

    转载请注明原文地址: https://ju.6miu.com/read-33721.html

    最新回复(0)