Chinaunix首页 | 论坛 | 博客
  • 博客访问: 387196
  • 博文数量: 81
  • 博客积分: 45
  • 博客等级: 民兵
  • 技术积分: 608
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-22 11:46
个人简介

一个愤青

文章分类

全部博文(81)

文章存档

2015年(40)

2014年(29)

2013年(11)

2012年(1)

我的朋友

分类: LINUX

2013-08-27 21:01:58

此处介绍的函数都属于低级IO,也即不带缓冲的IO。
主要涉及函数:open read write lseek close dup dup2 fcntl ioctl sync fsync fdatasync
1. open 为进程打开或创建文件
   [code]
   #include
   #include
   #include

   int open(const char *pathname, int flags);
   int open(const char *pathname, int flags, mode_t mode);

   int creat(const char *pathname, mode_t mode);
   [/code]

   其中:
   为进程返回打开此文件的文件描述符
   pathname为需要打开或创建的文件的路径
   flags为如下常量:
   O_RDONLY - 只读打开
   O_WRONLY - 只写打开
   O_RDWR - 读写打开
   这三个常量互斥、每次只能使用一个
   下面几个选项是可选的:
   O_APPEND - 每次写的时候追加到文件尾
   O_CREAT - 如果文件不存在,则创建之。使用此参数时需要同时使用open的第三个参数指定文件权限
   O_EXCL - 如果同时使用了O_CREAT,而文件已经存在的话则会出错(使用这两个选项的话检测和创建文件则成为了一个源自操作)
   O_TRUNC - 如果文件存在,并且文件已写或读写方式打开,则清空文件
   O_NOCTTY - 如果pathname指定的为一个字符终端设备,则不将该设备分配作为改进程的控制终端
   O_NONBLOCK - 如果pathname指定的为一个FIFO、块或者字符设备,则此选项为文件的本次打开操作和后续IO操作设置为非阻塞模式。
   O_DSYNC - 使每次write都等待物理IO操作完成,但是如果写操作并不影响读取刚写入的数据,则不等待文件属性的更新。
   O_RSYNC - 使每一个以文件描述符作为参数的read操作等待,直至任何对文件同一部分进行的未决写操作都完成。
   O_SYNC - 使每次写都等待物理IO操作完成,包含文件属性的更新所需的IO操作。

2. create
   [code]
   #include

   int creat(const char *pathname, mode_t mode);
   [/code]
   
   相当于open(pathname, O_WRONLY | O_CREAT | O_TRUNC, mode)

3. close
   [code]
   #include

   int close(int fd);
   [/code]

4. lseek
   [code]
   #include

   off_t lseek(int fd, off_t offset, int whence);
   [/code]

   其中: SEEK_SET(0) 表示文件开始处 SEEK_CUR(1) 表示文件当前偏移量 SEEK_END(2) 表示文件结尾

5. read
   [code]
   #include

   ssize_t read(int fd, void *buf, size_t count);
   [/code]
   返回读到字节数,如果到了文件结束,则返回0,出错返回-1

6. write
   [code]
   #include

   ssize_t write(int fd, const void *buf, size_t count);
   [/code]
   返回值与count相等时表示写成功,反之表示写文件失败

7. pread/pwrite
   [code]
   #include

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

   ssize_t pwrite(int fd, const void *buf, size_t count, off_t offset);
   [/code]

   原子操作,定位并进行读写

8. 由于此处介绍的文件IO都是不带缓冲的IO,所以一次读写的数量对IO的效率影响很大
9. dup/dup2多用于进程间文件共享,此处不多介绍,可以参考man手册
a. sync/fsync/fdatasync也不再多说
b. 另外fcntl和ioctl两个超级强大的函数在此也不再介绍了
阅读(1848) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~