`
kanwoerzi
  • 浏览: 1635802 次
文章分类
社区版块
存档分类
最新评论

unix环境高级编程-3.11-原子操作

 
阅读更多

上一节,我们学习了多个进程打开同一个文件,和单个进程打开多个文件原理。

1.填写至一个文件

早期的unix系统将数据添加文件尾端如下代码


对单个进程可正常工作,但是多个进程就不能了。

UNIX提供了一种方法是这种操作成为原子操作,该方法是在打开文件时设置O_APPEND标志。就是每次写文件的时候,豆浆该文件的偏移量移动到尾端。

2.pread和pwrite函数


pread返回值:返回字节数,若已经到文件结尾则返回0,出错返回-1;

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

调用pread,相当于顺序调用lseek和read,但是pread 又与这种顺序调用下列有重要区别。

  • 调用pread时候,无法终端其定位和读操作。
  • 不更新文件指针。

调用pwrite相当于顺序调用lseek和write,原理同上。

3.创建一个文件

在对open函数的O_CREAT和O_EXCL选项进行说明时候就是原子操作。

下面是截取gun c手册的。

int open (const char *filename, int flags[, mode t mode]) [Function]
The open function creates and returns a new file descriptor for the file named by
filename. Initially, the file position indicator for the file is at the beginning of the file.
The argument mode is used only when a file is created, but it doesn’t hurt to supply
the argument in any case.
The flags argument controls how the file is to be opened. This is a bit mask; you create
the value by the bitwise OR of the appropriate parameters (using the ‘|’ operator in
C). See Section 13.14 [File Status Flags], page 333, for the parameters available.
The normal return value from open is a non-negative integer file descriptor. In the
case of an error, a value of

分享到:
评论

相关推荐

    UNIX环境高级编程

    3.11 原子操作 45 3.11.1 添加至一个文件 45 3.11.2 创建一个文件 45 3.12 dup和dup2函数 46 3.13 fcntl函数 47 3.14 ioctl函数 50 3.15 /dev/fd 51 3.16 小结 52 习题 52 第4章 文件和目录 54 4.1 引言 54 4.2 stat...

    UNIX环境高级编程第二版

    3.11 原子操作 45 3.11.1 添加至一个文件 45 3.11.2 创建一个文件 45 3.12 dup和dup2函数 46 3.13 fcntl函数 47 3.14 ioctl函数 50 3.15 /dev/fd 51 3.16 小结 52 习题 52 第4章 文件和目录 54 4.1 引言 54 4.2 stat...

    UNIX环境高级编程.pdf

    3.11 原子操作 45 3.11.1 添加至一个文件 45 3.11.2 创建一个文件 45 3.12 dup和dup2函数 46 3.13 fcntl函数 47 3.14 ioctl函数 50 3.15 /dev/fd 51 3.16 小结 52 习题 52 第4章 文件和目录 54 4.1 引言 54 4.2 stat...

    UNIX环境高级编程(中文版+英文版+源代码)

    3.11 原子操作 45 3.11.1 添加至一个文件 45 3.11.2 创建一个文件 45 3.12 dup和dup2函数 46 3.13 fcntl函数 47 3.14 ioctl函数 50 3.15 /dev/fd 51 3.16 小结 52 习题 52 第4章 文件和目录 54 4.1 引言 54 4.2 stat...

    UNIX环境高级编程_第2版.part2

    3.11 原子操作59 3.12 dup和dup2函数60 3.13 sync、fsync和fdatasync函数61 3.14 fcntl函数62 3.15 ioctl函数66 3.16 /dev/fd 67 3.17 小结68 习题68 第4章文件和目录71 4.1 引言71 4.2 stat、fstat和...

    UNIX环境高级编程(PDF)

    3.11 原子操作 45 3.11.1 添加至一个文件 45 3.11.2 创建一个文件 45 3.12 dup和dup2函数 46 3.13 fcntl函数 47 3.14 ioctl函数 50 3.15 /dev/fd 51 3.16 小结 52 习题 52 第4章 文件和目录 54 4.1 引言 54 4.2 stat...

    UNIX环境高级编程中文版

    3.11 原子操作 45 3.11.1 添加至一个文件 45 3.11.2 创建一个文件 45 3.12 dup和dup2函数 46 3.13 fcntl函数 47 3.14 ioctl函数 50 3.15 /dev/fd 51 3.16 小结 52 习题 52 第4章 文件和目录 54 4.1 引言 54 4.2 stat...

    Unix环境高级编程电子书

    3.11 原子操作 45 3.11.1 添加至一个文件 45 3.11.2 创建一个文件 45 3.12 dup和dup2函数 46 3.13 fcntl函数 47 3.14 ioctl函数 50 3.15 /dev/fd 51 3.16 小结 52 习题 52 第4章 文件和目录 54 4.1 引言 54 4.2 stat...

    UNIX环境高级编程和源代码

    3.11 原子操作 45 3.11.1 添加至一个文件 45 3.11.2 创建一个文件 45 3.12 dup和dup2函数 46 3.13 fcntl函数 47 3.14 ioctl函数 50 3.15 /dev/fd 51 3.16 小结 52 习题 52 第4章 文件和目录 54 4.1 引言 54 4.2 stat...

    UNIX环境高级编程 不扣分哦

    3.11 原子操作 45 3.11.1 添加至一个文件 45 3.11.2 创建一个文件 45 3.12 dup和dup2函数 46 3.13 fcntl函数 47 3.14 ioctl函数 50 3.15 /dev/fd 51 3.16 小结 52 习题 52 第4章 文件和目录 54 4.1 引言 54 4.2 stat...

    UNIX环境高级编程_第二版中文

    3.11 原子操作  3.12 dup和dup2函数  3.13 sync、fsync和fdatasync函数  3.14 fcntl函数  3.15 ioctl函数  3.16 /dev/fd  3.17 小结  习题  第4章 文件和目录  4.1 引言  4.2 stat、fstat和...

    UNIX环境高级编程(第二版中文).pdf

    3.11 原子操作 45 3.11.1 添加至一个文件 45 3.11.2 创建一个文件 45 3.12 dup和dup2函数 46 3.13 fcntl函数 47 3.14 ioctl函数 50 3.15 /dev/fd 51 3.16 小结 52 习题 52 第4章 文件和目录 54 4.1 引言 54 4.2 stat...

    UNIX环境高级编程(第二版中文)

    UNIX环境高级编程 第1章 UNIX基础知识 1 1.1 引言 1 1.2 UNIX体系结构 1 1.3 登录 1 1.4 文件和目录 3 1.5 输入和输出 6 1.6 程序和进程 8 1.7 出错处理 10 1.8 用户标识 12 1.9 信号 14 1.10 ...

    UNIX环境高级编程(第三章)

    第3章 文件I/O 35 3.1 引言 35 ...3.11 原子操作 45 3.11.1 添加至一个文件 45 3.11.2 创建一个文件 45 3.12 dup和dup2函数 46 3.13 fcntl函数 47 3.14 ioctl函数 50 3.15 /dev/fd 51 3.16 小结 52 习题 52

    中文第一版-UNIX环境高级编程

    3.11 原子操作 45 3.11.1 添加至一个文件 45 3.11.2 创建一个文件 45 3.12 dup和dup2函数 46 3.13 fcntl函数 47 3.14 ioctl函数 50 3.15 /dev/fd 51 3.16 小结 52 习题 52 第4章 文件和目录 54 4.1 引言 54 4.2 stat...

Global site tag (gtag.js) - Google Analytics