《UNIX环境高级编程》读书笔记 —— 文件 I/O
打开或创建一个文件
#include <fcntl.h>
int open(const char *pathname, int oflag, .../*mode_t mode*/);
返回值:若成功则返回文件描写叙述符,若出错则返回-1
oflag选项:
O_RDONLY
O_WRONLY
O_RDWR
以上三个常量中必须指定一个,且仅仅能指定一个。
下面常量都是可选的:
O_APPED 每次写时追加到文件尾
O_CREAT 若文件不存在,则创建
O_EXCL 若同一时候指定了O_CREAT。而文件已经存在,则出错;否则创建文件
O_TRUNC 若文件存在且为仅仅写或读写打开成功。则讲文件截断为0
O_NOCTTY
O_NONBLOCK 若pathname指定的是一个FIFO、一个快特殊文件或者一个字符特殊文件,则此选项为文件的本次打开操作和兴许的I/O操作设置非组赛模式。
O_DSYNC 每次write都等待物理I/O完毕。但不等待文件属性更新
O_RSYNC
O_SYNC 每次write都等待物理I/O完毕。包含write引起的文件属性更新所需的I/O
#include <fcntl.h>
int create(const char *pathname, mode_t mode);
返回值:若成功则返回为仅仅写打开的文件描写叙述符。若出错则返回-1
该函数等效于:
open(pathname, O_WRONLY | O_CREAT | O_TRUNC, mode)
关闭一个打开的文件
#include <unistd.h>
int close(int filedes);
返回值:若成功则返回0,若出错则返回-1
关闭一个文件时还会释放该进程在该文件上的全部加锁。
当一个进程结束时,内核会自己主动关闭它全部打开的文件。
为一个打开的文件设置偏移量
#include <fcntl.h>
off_t lseek(int filedes, off_t offset, int whence);
返回值:若成功则返回新的文件偏移量,若出错则返回-1
whence取值:
SEEK_SET 将文件偏移设置为距文件開始处offset个字节
SEEK_CUR 将文件偏移设置为当前值加offset。offset可为正或负
SEEK_END 将文件偏移设置为文件长度加offset。offset可为正或负
管道、FIFO和网络套接字不可设置偏移量
文件读写
#include <unistd.h>
ssize_t read(int filedes, void *buf, size_t nbytes);
返回值:若成功则返回读到的字节数,若已到文件尾则返回0。若出错则返回-1
#include <unistd.h>
ssize_t write(int filedes, void *buf, size_t nbytes);
返回值:若成功则返回已写的字节数。若出错则返回-1
文件共享
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2FuZ3l1bGluZzEyMzQ1Njc4OTA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
拷贝文件描写叙述符
#include <unistd.h>
int dup(int filedes);
int dup2(int filedes, filedes2);
返回值:若成功返回新的文件描写叙述符。若失败返回-1
dup返回的是当前可用的最小的文件描写叙述符
dup2则返回filedes2所指定的文件描写叙述符,若filedes2已经存在,则先将其关闭
文件同步
#include <unistd.h>
int fsync(int filedes);
int fdatasync(int filedes);
void sync();
sync 该函数仅仅是将全部改动过的块缓存增加写队列。并不等真正的写磁盘结束就返回,系统update守护进程会定期(30秒)调用该函数
fsync 仅仅针对filedes描写叙述符起作用。而且等待写磁盘操作结束然后返回
fdatasync 类似于fsync,但它仅仅影响文件的数据部分。不同步更新文件属性
#include <fcntl.h>
int fcntl(int filedes, int cmd, .../* arg */);
返回值:若成功则依赖于cmd,若失败则返回-1
文件控制
fcntl的5种功能:
复制一个现有的描写叙述符 cmd = F_DUPFD
获得/设置文件描写叙述符标记 cmd = F_GETFD / F_SETFD
眼下仅仅有一个标志:FD_CLOEXEC
获得/设置文件状态标记 cmd = F_GETFL / F_SETFL
文件状态标志:O_RDONLY 仅仅读打开
O_WRONLY 仅仅写打开
O_RDWR 读写打开
O_APPEND *每次写时追加
O_NONBLOCK *非堵塞模式
O_SYNC *等待写完毕(数据和属性)
O_DSYNC *等待写完毕(仅数据)
O_RSYNC *同步读、写
O_FSYNC *
O_ASYNC *
加*号的为F_SETFL所能改动的
获得/设置异步I/O全部权 cmd = F_GETOWN / F_SETOWN
获得/设置记录锁 cmd = F_GETLK / F_SETLK / F_SETLKW
#include <unistd.h>
int ioctl(int filedes, int request, ...);
返回值:若出错返回-1,成功返回其它返回值
《UNIX环境高级编程》读书笔记 —— 文件 I/O的更多相关文章
- [置顶] 文件和目录(二)--unix环境高级编程读书笔记
在linux中,文件的相关信息都记录在stat这个结构体中,文件长度是记录在stat的st_size成员中.对于普通文件,其长度可以为0,目录的长度一般为1024的倍数,这与linux文件系统中blo ...
- unix环境高级编程-读书笔记与习题解答-第一篇
从这周开始逐渐的进入学习状态,每天晚上都会坚持写c程序,并且伴随对这本书的深入,希望能写出更高质量的读书笔记和程序. 本书的第一章,介绍了一些关于unix的基础知识,在这里我不想去讨论linux到底是 ...
- [置顶] 文件io(一)--unix环境高级编程读书笔记
unix-like(后面以linux为例)系统中的文件操作只需要五个函数就足够了,open.close.read.write以及lseek.这些操作被称为不带缓存的io,这里有必要说一下带缓存和不带缓 ...
- unix 环境高级编程-读书笔记与习题解答-第二篇
第四节 输入与输出 上次的笔记中写到的 open, read, write, lseek 以及close ,都是不带缓存的IO函数,这些函数都使用文件描述符进行工作. 上一篇笔记用到的 read(ST ...
- unix 环境高级编程 读书笔记与习题解答第四篇
第一章 第六节 第一小节 这一章没有程序设计和API方面的深入学习,而是注重介绍了unix操作系统中的原始数据类型和系统原型函数,错误处理方面的知识. ____unistd.h____ 该文件包含了u ...
- 《UNIX环境高级编程》笔记--文件访问权限和新文件、目录所有权
1.与进程关联的用户ID和组ID 与一个进程关联的ID有一下几个: 实际用户ID和实际组ID标识我们究竟是谁.通常在一个会话间值是不会改变的,但是超级用户进程有方法改变 他们,在以后的进程控制中会进行 ...
- unix进程的环境--unix环境高级编程读书笔记
http://blog.csdn.net/xiaocainiaoshangxiao/article/category/1800937
- unix环境高级编程 读书笔记
1.上班业余时间把书下载下来,第一章读完了,但是程序只能回家运行啦!Fighting!
- (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...
- (三) 一起学 Unix 环境高级编程 (APUE) 之 文件和目录
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...
随机推荐
- 【CF1068A】Birthday(签到)
题意:有N种棋子,M个人,已有K种收藏,要求最小的每个人送的棋子数使得最坏情况下至少有L种新的收藏,无解输出-1 N,M,K,L<=1e18 思路: #include<cstdio> ...
- MSClass (Class Of Marquee Scroll通用不间断滚动JS封装类) Ver 1.65
原文发布时间为:2010-02-07 -- 来源于本人的百度文章 [由搬家工具导入] http://www.popub.net/script/MSClass.html/*MSClass (Class ...
- 排名次SQL语句【名次可重复时】
原文发布时间为:2008-10-26 -- 来源于本人的百度文章 [由搬家工具导入] 功能实现 名次可重复时,比如第一名有两个。。。 select *,(select count(distin ...
- Java IO 学习(四)BIO/NIO
本文会尝试介绍Java中BIO与NIO的范例与原理 使用的模型非常简单:服务器--客户端模型,服务器会将客户端发送的字符串原样发回来.也就是所谓的echo server. BIO 也就是所谓的Sock ...
- (7)centos7安装配置ftp服务器
1.安装vsftpd yum install vsftpd -y 2.设置开机启动vsftpd ftp服务 systemctl enable vsftpd.service 3.启动vsftpd服务 s ...
- 立即执行函数(IIFE)
立即执行函数(IIFE) 看到这里,相信你一定迫不及待地想知道究竟如何做了吧,其实很简单,只需要用括号全部括起来即可,比如下面这样: (function(){ /* code */ }()); 为什么 ...
- POJ 1239 Increasing Sequences [DP]
题意:略. 思路:进行两次dp. 第一次dp从前向后,用dp[x]表示从第x位向前dp[x]位可构成一个数字,且与前面的数组符合题意要求.最后求的dp[n]即为最后一个数字的长度. 而题目还有要求,所 ...
- JDBC-oracle(登陆)
题目: 第一步:创建用户表,并插入数据(插入后记得commit) create table users ( name ), password ) ); '); '); 第二步:编写登陆界面(index ...
- maxwell简单部署使用
详细资料可以参考maxwell官网 (mysql + maxwell + kafka + elasticsearch) 说明:本文主要是关于配置maxwell监听mysql的数据修改并实时将修改内容 ...
- Importance sampling
用蒙特卡洛求解积分时 (Monte Carlo 随机采样对目标积分函数做近似) importance sampling func p(x) p(x)值大的地方,Monte Carlo多采几次 值小的地 ...