Linux系统编程_2_文件I/O

这里说的的文件I/O指的是不带缓存的;

1.关于带缓存的IO操作和不带缓存的IO操作,参见另一篇文章:

带缓存IO和不带缓存IO详解


Linux中的文件IO(不带缓存的IO)通常用的有以下几个:

open    read    write    lseek   close


2.open的参数

int fd(filename, mode);

mode 通常可以是O_RDONLY(只读)  O_WRONLY(只写)  O_RDWR(读写) 必须指定且只能指定一个!

其他的可供选择,可通过或运算添加:O_APPEND  O_CREAT  O_EXCL   O_TRUNC


3.read与write在读取网络数据时,可能由于网络的缓冲机制等造成实际读到的数据小于应读数据。


4.用lseek实现获取文件大小的功能:

1 #include <stdio.h>
2 #include <unistd.h>
3 #include <fcntl.h>
4 #include <stdlib.h>
5
6 int main(int argc, char ** argv)
7 {
8     off_t size;
9     int nFd;
10
11     if(argc < 2)
12     {
13         printf("Usage: ./size xxx\n");
14         exit(-1);
15     }
16
17     nFd = open(argv[1], O_RDONLY);
 18     if(-1 == nFd)
19     {
20         perror("Open file error");
21         exit(-1);
22     }
23     size = lseek(nFd, 0, SEEK_END);
24     printf("The file size is : %d\n", size);
25
26     return 0;
27 }

5.dup与dup2函数,都用来复制一个现存的文件描述符

int dup(int fd);

int dup2(int fd1,int fd2);//若 fd2已经打开,则先关闭


6.sync  fsync  fdatasync函数都可以用来将缓冲区中的数据刷新到物理磁盘

sync函数并不等待实际的写磁盘操作结束后返回。

fsync函数等待写磁盘操作结束后返回,可以用于数据库这样的应用程序。


7.fcntl函数——可以改变已经打开的我文件的性质

#include <fcntl.h>

int fcntl(int fd, int cmd, int arg);

fcntl函数有五种功能:

1.复制一个现有的文件描述符(cmd=F_DUPFD)

2.获取/设置文件描述符(cmd=F_GETFD / cmd=F_SETFD

3.获取/设置文件状态(cmd=F_GETFL / cmd =F_SETFL)

4.获取/设置异步IO所有权(cmd=F_GETOWN / cmd=F_SETOWN)

5.获取/设置文件记录锁(cmd=F_GETLK / cmd=F_SETLK/F_SETLKW)




Linux系统编程_2_文件I/O,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。