函数open和openat

#include

int open(const char *path, int oflag, ... /* mode_t mode */);

int openat(int fd, const char *path, int oflag, ... /* mode_t mode */);

两个函数的返回值:若成功,返回文件描述符;若出错,返回-1

fd参数把open和openat函数区分开,共有三种可能性。

path参数指定的是绝对路径,在这种情况下,fd参数被忽略,openat函数就相当于open函数。

path参数指定的是相对路径,fd参数指出了相对路径名在文件系统中的开始地址。fd参数是通过打开相对路径名所在的目录来获取。

path参数指定了相对路径,fd参数具有特殊值AT_FDCWD。在这种情况下,路径名在当前工作目录中获取,openat函数在操作上与open函数类似。

函数中的oflag参数说明。

O_RDONLY 只读打开。

O_WRONLY 只写打开。

O_EXEC 只执行打开。

O_SEARCH 只搜索打开(应用于目录)。

O_APPEND 每次写时都追加到文件的尾端。

O_CLOEXEC 把FD_CLOEXEC常量设置为文件描述符标志。

O_CREAT 若此文件不存在则创建它。使用此选项时,open函数需要同时说明第三个参数mode,用mode指定该新文件的访问权限位。

O_EXCL 如果同时指定了O_CREAT,而文件已经存在,则出错。用此可以测试一个文件是否存在,如果不存在,则创建此文件,这使测试和创建两者成为一个院子操作。

O_NOCTTY 如果path引用的是终端设备,则不将该设备分配作为此进程的控制终端。

O_NOFOLLOW 如果path引用的是一个符号链接,则出错。

O_NONBLOCK 如果path引用的是一个FIFO、一个块特殊文件或一个字符特殊文件,则此选项为文件的本次打开操作和后续的I/O操作设置非阻塞方式。

O_SYNC 使每次write等待物理I/O操作完成,包括由该write操作引起的文件属性更新所需的I/O。

O_TRUNC 如果此文件存在,而且为只写或读写成功打开,则将其长度截断为0。

O_TTY_INIT 如果打开一个还未打开的终端设备,设置非标准termios参数值,使其符合Single UNIX Specification。

O_DSYNC 使每次write要等待物理I/O操作完成,但是如果该写操作并不影响读取刚写入的数据,则不需要等待文件属性被更新。

O_RSYNC 使每一个以文件描述符作为参数进行的read操作等待,直至所有对文件同一部分挂起的写操作都完成。

函数creat

#include

int creat(const char *path, mode_t mode);

返回值:若成功,返回只写打开的文件描述符;若出错,返回-1

该函数等于:

int open(const char *path, O_WRONLY | O_CREAT | O_TRUNC, mode);

函数close

#include

int close(int fd);

返回值:若成功,返回0;若出错,返回-1

关闭一个文件时还会释放该进程加在该文件上的所有记录锁。当一个进程终止时,内核自动关闭它所有的打开文件。很多程序利用了这一功能而不显式地用close关闭打开的文件。

函数lseek

#include

off_t lseek(int fd, off_t offset, int whence);

off_t为带符号整形

返回值:若成功,返回新的文件偏移量;若出错,返回-1

参数offset的解释与whence的值有关。

若whence是SEEK_SET,则将该文件的偏移量设置为距文件开始处offset个字节。

若whence是SEEK_CUR,则将该文件的偏移量设置为其当前值加offset,offset可为正或负。

若whence是SEEK_END,则将该文件的偏移量设置为文件长度加offset,offset可为正或负。

如果文件描述符指向的是一个管道、FIFO或网络套接字,则lseek返回-1,并将errno设置为ESPIPE。

函数read

#include

ssize_t read(int fd, void *buf, size_t nbytes);

返回值:读到的字节数,若已到文件尾,返回0。若出错,返回-1

有多种情况可能使读到的字节数少于要求读的字节数。

读普通文件时,在读到要求字节数之前已经达到了文件尾端。

当从终端设备读时,通常一次最多读一行。

当从网络读时,网络中的缓冲机制可能造成返回值小于所要求读的字节数。

当从管道或者FIFO读时,如果管道包含的字节少于所需的数量,则read将只返回实际可用的字节数。

当从某些面向记录的设备(如磁带)读时,一次最多返回一个记录。

当被信号中断,而已经读取了部分数据时。

函数write

#include

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

返回值:若成功,返回已写的字节数;若出错,返回-1

原子操作函数pread和pwrite

#include

ssize_t pread(int fd, void *buf, size_t nbytes, off_t offset);

返回值:读到的字节数,若已到文件尾,返回0;若出错,返回-1

ssize_t pwrite(int fd, const void *buf, size_t nbytes, off_t offset);

返回值:若成功,返回已写的字节数;若出错,返回-1

调用pread相当于调用lseek后调用read,但是pread又与这种顺序调用有区别(调用pwrite与调用pread相同)。

调用pread时,无法中断其定位和读操作。

不更新当前文件偏移量。

函数dup和dup2

#include

int dup(int fd);

int dup2(int fd, int fd2);

两个函数的返回值:若成功,返回新的文件描述符;若出错,返回-1

由dup返回的文件描述符一定是当前可用文件描述符中的最小数值。对于dup2,可以用fd2参数指定新文件描述符。如果fd2已经打开,则先将其关闭。如果fd等于fd2,则dup2返回fd2,而不关闭它。否则,fd2的FD_CLOEXEC文件描述符标志被清除,这样fd2在进程调用exec时是打开状态。

函数sync, fsync, fdatasync

当我们向文件写入数据时,内核通常先将数据复制到缓冲区中,然后排入队列,晚些时候再写入磁盘。这种方式被称为延迟写(delayed write)。为了保证磁盘上实际文件与缓冲区中内容的一致性,UNIX提供了sync,fsync和fdatasync三个函数。

#include

int fsync(int fd);

int fdatasync(int fd);

返回值:若成功,返回0;若出错,返回-1

void sync(void);

sync只是将所有修改过的块缓冲区排入写队列,然后返回,它并不等待实际的写磁盘操作结束。

fsync函数只对文件描述符fd指定的一个文件起作用,并且等待写磁盘操作结束才返回。

fdatasync函数类似于fsync,但它只影响文件的数据部分。fsync还会同步更新文件的属性。

函数fcntl

fcntl函数可以改变已经打开文件的属性。

#include

int fcntl(int fd, int cmd, ... /* int arg */);

返回值:若成功,则依赖于cmd;若出错,返回-1

fcntl函数有以下5中功能。

复制一个已有的描述符(cmd = F_DUPFD或F_DUPFD_CLOEXEC)。

获取或设置文件描述符标志(cmd = F_GETFD或F_SETFD)。

获取或设置文件状态标志(cmd = F_GETFL或F_SETFL)。

获取或设置异步I/O所有权(cmd = F_GETOWN或F_SETOWN)。

获取或设置记录锁(cmd = F_GETLK, F_SETLK或F_SETLKW)。

函数ioctl

#include /* System V */

#include /* BSD and Linux */

int ioctl(int fd, int request, ...);

返回值:若出错,返回-1;若成功,返回其他值

在此原型中,我们表示的只是ioctl函数本身所要求的头文件。通常,还要求另外的设备专用头文件。例如,终端I/O的ioctl命令都需要头文件。每个设备驱动程序可以定义自己专用的一组ioctl命令,系统则为不同类型的设备提供通用的ioctl命令。

linux .o文件,Linux 文件I/O相关推荐

  1. 判断文件或文件夹(目录)是否存在 C/C++ win/linux通用

    一.windows下使用_access()或linux下使用access()函数 windows下使用_access()函数 所在头文件:<io.h> 函数原型:int _access(c ...

  2. Linux文件,文件描述符以及dup()和dup2()

    一.Linux中文件 可以分为4种:普通文件.目录文件.链接文件和设备文件. 1.普通文件 是用户日常使用最多的文件,包括文本文件.shell脚本.二进制的可执行和各种类型的数据. ls -lh 来查 ...

  3. Windows与Linux之间互传文件的方法

    以下方法均是以Windows为操作机: 1. 通过WinSCP: WinSCP是一款开源的SFTP客户端,运行于Windows系统下,遵照GPL发布.WinSCP除了SFTP,还支持SSH.SCP(S ...

  4. [转] linux系统文件流、文件描述符与进程间关系详解

    http://blog.sina.com.cn/s/blog_67b74aea01018ycx.html linux(unix)进程与文件的关系错综复杂,本教程试图详细的阐述这个问题. 包括:     ...

  5. linux查看硬链接的对应文件,linux查看硬链接对应的所有文件

    在linux中,链接文件分为硬链接和软链接文件两种,其中硬链接通过ln source_file dist_file建立,软链接通过ln -s source_file dist_file建立. 软硬链接 ...

  6. Linux 下高级日志文件查看器Log File Navigator

    Log File Navigator,简称lnav,是一款面向小规模的适用于 Linux 的高级日志文件查看器.它是一个终端应用程序,可以理解您的日志文件,让您轻松找到问题,几乎不需要什么设置. ln ...

  7. 如何快速清空 Linux 中的大文件

    本文总结了几种快速清空Linux中的大文件方法,快来看看对你有帮助吗? 1. 通过重定向到null清空文件内容 使用 shell 重定向null(不存在的对象)到文件的最简单方法来清空文件内容 # & ...

  8. python 测试linux dev文件,Linux测试开发人员要掌握的Linux命令有哪些?

    今天小编要跟大家分享的文章是关于Linux测试开发人员要掌握的学习Linux和 一.文件和目录相关 文件和目录相关 1.进入目录--cd cd /usr/local //进入/usr/local这个目 ...

  9. Linux目录结构和文件基本操作

    一.Linux目录结构 1.FHS(File System Hierarchy Standrad,文件系统层次结构标准) FHS定义了两层规范,第一层是/下面的各个目录应该要放什么文件数据,例如/et ...

  10. python linux编程与window编程_Python实现Windows和Linux之间互相传输文件(文件夹)的方法...

    项目中需要从Windows系统传输ISO文件到Linux测试系统,然后再Linux测试系统里安装这个ISO文件.所以就需要实现如何把文件从Windows系统传输到Linux系统中. 在项目中使用了ps ...

最新文章

  1. LeetCode 51. N皇后
  2. linux中pthread_join()与pthread_detach()详解
  3. 简单叙述html的发展历史,HTM
  4. 也谈SSDT Hook(一)
  5. Apache Common常用jar包
  6. oracle dd if=/dev/zero of=/dev,【转】dd if=/dev/zero of=的含义是什么?Linux 下的dd命令使用详解...
  7. P2197 【模板】nim 游戏(python3实现)
  8. android 中RecyclerView 嵌套了 GridView 的用法
  9. 数码大师2013破解补丁|数码大师2013白金版注册破解补丁下载(附数码大师2013白金版注册码)
  10. xcode5 xcode6 xcode6.2beta网盘下载地址
  11. Mac OS Catalina 安装Java6
  12. u盘在计算机打不开,别的电脑能打开u盘自己的怎么打不开解决方法
  13. 如何将Nios II硬件和软件合成一个文件(NIOS II)(硬件)(软件)(合并)
  14. 无线破解攻击工具Aircrack-ng使用详解
  15. 添加zabbix飞信报警
  16. 2021 写博客指南·万字长文警告
  17. linux进程家族树,linux下用c语言创建进程树
  18. 王者荣耀战力查询小程序源码下载-支持安卓ios微信和QQ战力查询支持打包成APP
  19. 前端文件下载兼容方案(兼容主流浏览器,包括IE与Safari)
  20. centOS6.8安装VMware tools,请确保您已登录客户机操作系统。在客户机中装载CD驱动器启动终端,使用tar解压缩安装程序,然后执行vmware-insall.pl安装VMware To

热门文章

  1. cdn共振为什么要拍身份证_干货 | 拍婚纱照为什么要提前预约呢?
  2. hashmap底层原理_周末自己动手撸一个 HashMap,美滋滋
  3. NEW RToax logo
  4. OpenSSL:openssl-xxx.tar.gz
  5. srsLTE源码学习:逻辑信道多路复用与MAC CE分解pdu_queue.h,pdu_queue.cc
  6. C语言与汇编语言的区别
  7. c 语言 数据库 pdf下载,Visual C/C++ 编程精选集锦 数据库及图形图像分册 PDF扫描版[38MB]...
  8. java string补空格_Java String字符串补0或空格详解
  9. SpringCloud feign、hystrix、zuul超时配置
  10. html页面锁屏,锁屏页面.html