[linux编程]文件I/O

作者: mbinary | 来源:发表于2018-05-02 00:09 被阅读8次

文件描述符

非负整数, 默认使用最小的可用的整数
0,1,2 对应 STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO

读写函数

#include<unistd.h>

  • int open(const char path,int oflag ... /mode*/);�oflag: �5必须选1: O_RDONLY, O_WRONLY, O_RDWR, O_SEARCH, O_EXEC
    可选: O_APPEND, O_CREAT, O_EXCL, O_SYNC, O_TRUNC�
    eg O_WDONLY | O_CREAT | O_TRUNC
  • int close(int fd);
  • off_t lseek(int fd, off_t offset, int whence)�whence: SEEK_SET, SEEK_CUR, SEEK_END 错误则返回-1�offset 可负, 可以超过文件大小, 在超过文件大小后写,会形成空洞, 用\0填补,但是不占用磁盘块
  • ssize_t read(int fd, void *buf,size_t nbytes);�if未到EOF,则读取nbytes,返回nbytes, 否则剩多少,读多少,返回多少(到EOF就是0)
  • ssize_t write(int fd, void buf,size_t nbytes);�io效率*: buf设置为4096及更大效率较高

进程文件结构

image.png image.png

文件共享

image.png

原子操作

一般有多个函数的操作,, 不是原子操作, 多进程运行时可能出错,比如

seek pointer  to end
write

单进程没有问题, 而多进程访问同一个文件, 而不是同一个文件描述符时, 比如a,b访问f
当a执行完seek到end后 ,写指针在n, b执行seek to end 然后写至x bytes,此时文件指针已经到n+x, 但是a会在n处继续执行写,然后就覆盖了bxx的内容

复制文件描述符dup dup2

#include<unistd.h>
int dup(int fd); // copy fd
int dup2(int fd,int fd2)
// close fd2 and open fd,  note it's  an atomic op
//if  fd2==fd : return fd2
image.png

参考资料: UNIX环境高级编程 W.Richard Stevens, Stephen A. Rago

相关文章

  • Linux/UNIX系统编程手册-文件IO

    Linux/UNIX系统编程手册 [德] Michael Kerrisk 第4章 文件I/O: 通用的I/O模型 ...

  • [linux编程]文件I/O

    文件描述符 非负整数, 默认使用最小的可用的整数0,1,2 对应 STDIN_FILENO, STDOUT_FI...

  • Netty-NIO

    理解Netty的本质原理,最好理解Linux的I/O模型,参考书---《Unix网络编程》 Linux I/O流程...

  • Linux磁盘管理

    Linux 磁盘管理 I/O ports: I/O设备地址在Linux上一切皆是文件,每一个设备也都是一个文件,设...

  • I/O访问方式

    缓存IO 缓存I/O又被称作标准I/O,大多数文件系统的默认I/O操作都是缓存I/O。在Linux的缓存I/...

  • Python_IO编程

    本篇文章将介绍python里面的I/O编程。更多内容请参考:python学习指南 I/O编程 读写文件时最常见的I...

  • 网络优化

    网路I/O 1、I/O模型 “一切皆文件”,Linux内核会把所有外部设备看做一个文件来操作,在网络I/O中系统对...

  • Reactor模式

    节选自:Linux高性能服务器编程 Reactor模式要求主线程(I/O处理单元)只负责监听文件描述上是否有事件...

  • linux I/O5中模型认识

    linux I/O5中模型 引入I/O模型 标准I/O: 缓存 IO 又被称作标准 IO,大多数文件系统的默认 I...

  • Linux通用I/O模型

    学习Linux系统编程,文件I/O是一个不错的切入点。首先,日常操作中或多或少都使用过文件,有一定的概念;其次,文...

网友评论

    本文标题:[linux编程]文件I/O

    本文链接:https://www.haomeiwen.com/subject/osfalftx.html