首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Linux 资料I/O编程

2013-03-12 
Linux 文件I/O编程学习linux文件编程之前,首先先了解一点关于linux中文件的知识,这样好为以后学习做准备。1

Linux 文件I/O编程

学习linux文件编程之前,首先先了解一点关于linux中文件的知识,这样好为以后学习做准备。

1.Linux 中的文件主要分为4种:普通文件、目录文件、链接文件和设备文件。2.不带缓存的文件I/O 操作:主要用到5 个函数:open、read、write、lseek和close。

接着我们就看看这几个函数是详细用法

3.open函数是用于打开或创建文件,在打开或创建文件时可以指定文件的属性及用户的权限等各种参数。函数原型 int open(const char *pathname,flags,int perms)函数返回值 成功:返回文件描述符失败:-1

下面是关于这个函数的应用举例


学会了打开文件,接着就是关闭一个文件的使用方法,在关闭一个文件时候我们会用到文件操作的几个函数,这样就可以对一个文件进行简单的读写操作,

4.read函数是用于将指定的文件描述符中读出数据。当从终端设备文件中读出数据时,通常一次最多读一行。函数原型 ssize_t read(int fd,void *buf,size_t count) 函数返回值 成功:读到的字节数 0:已到达文件尾 -1:出错
5.write函数是用于向打开的文件写数据,写操作从文件的当前位移量处开始。若磁盘已满或超出该文件的长度,则write函数返回失败。函数原型 ssize_t write(int fd,void *buf,size_t count)函数返回值成功:已写的字节数 -1:出错
6.lseek函数是用于在指定的文件描述符中将文件指针定位到相应的位置。函数原型 off_t lseek(int fd,off_t offset,int whence) 函数返回值 成功:文件的当前位移 -1:出错

7. close函数是用于关闭一个打开文件。当一个进程终止时,它所有已打开的文件都由内核自动关闭,很多程序都使用这一功能而不显示地关闭一个文件。函数原型 int close(int fd) 函数返回值0:成功 -1:出错

下面是关于这个函数的应用举例


为了解决文件资源共享产生竞争,就可以用文件中的fcntl函数给文件上锁来解决这个问题。

8.fcntl 建立记录锁Linux 通常采用的方法是给文件上锁,来避免共享的资源产生竞争的状态,文件锁包括建议性锁和强制性锁.
建议性锁要求每个上锁文件的进程都要检查是否有锁存在,并且尊重已有的锁,一般情况下,内核和系统都不使用建议性锁
强制性锁是由内核执行的锁,当一个文件被上锁进行写入操作的时候,内核将阻止其他任何文件对其进行读写操作
记录锁又可分为读取锁(共享锁)和写入锁(排斥锁)
函数原型 int fcnt1(int fd,int cmd,struct flock *lock)函数返回值成功:0 -1:出错

下面是一个简单的文件上读取锁的例子



下面是一个简单的文件上写入锁的例子


Linux 资料I/O编程

重新打开一个终端运行,这时候就会发现写入锁已经上过了

Linux 资料I/O编程

fcntl函数解决了文件的共享问题,但是如何处理I/O复用的情况,接下来就介绍解决处理I/O复用的情况,首先先了解I/O处理的模型有哪些

9.I/O 处理的模型有5种1、 阻塞 I/O模型 2、非阻塞模型 3、I/O多路转接模型 4、信号驱动 I/O 模型 5、异步 I/O模型
10.select函数的I/O多路转接模型是处理I/O复用的一个高效的方法

函数原型int select(int numfds,fd_set *readfds,fd_set *writefds,fd_set *exeptfds,struct timeval *timeout)

下面是讲一个文件的内容读出,每个一定的时间写入另一个文件的例子


源代码下载地址:

热点排行