文件I/O

Posted blog-morui

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件I/O相关的知识,希望对你有一定的参考价值。

头文件fcntl.h

O_RDONLY

O_WRONLY

O_RDWR

大多数为 0 1 2

O_EXEC :只执行打开

O_SEARCH: 只搜索打开(在目录打开时验证它的搜索权限)<未定义>

O_APPEND:写时追加

O_EXCL : 如果同时指定O_CREATE则出错。在创建文件时候是原子操作

O_NOFOLLOW:如果是一个链接则出错

O_NONBLOCK:如果是fifo或者特殊文件,则非阻塞

O_TRUNC:如果同一目录创建的文件名字超过NAME_MAX则截断


O_SYNC:每次write等待物理IO操作完成

O_DSYNC:每次write等待IO。如果write不影响read则不等待。

O_RSYNC:(linux中 同O_SYNC一样)

open 和 openat

open( path, flags...,mode )

openat( fd, path, flags...,mode)`

区别:如果path是绝对路径,fd无意义。反之,则是相对于fd的相对路径

lseek(int fd, off_t offset, int whence)

  • whence值

    SEEK_SET:文件开始处

    SEEK_CUR:文件当前处

    SEEK_END:文件末尾

    如果 fd 指向的是一个管道、fifo、网络套接字。返回-1。

    通过设置offset值可以扩充文件在磁盘的大小

read(int fd, void* buf,size_t bytes)

  • return

    成功返回字节数

    到达文件末尾则返回0

    :在文件只有30个字节,读取大于个字节的时候返回30,在下一次read的时候才返回0

  • 读取终端通常一次只能读一行

  • 读取网络设备的时候,因为网络的缓冲机制可能返回值小于所要求读取的字节数

  • 读取面向记录的设备读取的时候,一次最多返回一个记录

write(int fd, const void* buf, size_t nbytes)

  • return

    成功返回的字节数于nbytes相等则表示成功

    否则表示失败

    :出错原因 1、 磁盘已写满 2、超过了给定进程的文件长度限制

以上是关于文件I/O的主要内容,如果未能解决你的问题,请参考以下文章