linux 文件I/O 编程
来源:互联网 发布:als矩阵分解推荐模型 编辑:程序博客网 时间:2024/06/05 18:18
2011-4-7
一.文件I/O编程
1.不带缓存的文件IO操作
1.基本操作
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
Open
Fd=open(“/tmp/hello.c”,O_WRONLY |O_CREAT,0600);
Close
Close(fd);
Read
Read(fd,buf,len)
Write
Write(fd,buf,len)
Lseek
Off_t lseek(int fd,off_t ,int whence)
Whence
SEEK_SET SEEK_CUR SEEK_END
Lseek(fd,0,SEEK_SET)文件指针移到文件起始位置
2.文件锁
Fcntl
Fcntl(int fd, int cmd, struct flock *lock)
Cmd F_SETLK F_GETLK
Lock具体结构略,
说明锁的类型,有
F_RDLCK 读取锁(共享锁,可共享)
F_WRLCK 写入锁(互斥锁)
F_UNLCK 解锁
Fcntl(fd,F_RDLCK,&lock);
Fcntl(fd,F_WRLCK,&lock);
Fcntl(fd,F_UNLCK,&lock);
3.select
Fcntl解决了文件共享的问题,接着就是I/O复用的问题。
IO处理模型 包括,阻塞型IO模型,非阻塞模型,IO多路转接模型,信号驱动IO模型,异步模型
对于select而言,属于IO多路转接模型
在这种模型下,如果请求的IO操作阻塞,且它不是真正的阻塞IO,而是让其中的一个函数等待,在这期间,IO还能进行其他操作,select函数和poll函数就属于此种模型。
#include<sys/types.h>
#include<sys/time.h>
#include<unistd.h>
int select(int numfds,fd_set *readfds,fd_set *writefds,fd_set *exeptfds,struct timeval *timeout)
numfds为需要检测的号码最高的文件描述符+1
读文件描述集 写文件描述集 出错文件描述集
Timeout,如果为0则从不等待 测试所有的描述集之后就返回
如果为NULL,表示永远等待,直到捕捉到信号或者文件描述集已经准备好。
对文件描述集的操作包括,
FD_ZERO(fd_set *set)
FD_SET(int fd,fd_set *set)
FD_CLR(int fd,fd_set *set)
FD_ISSET(int fd,fd_set *set) 测试该集中的一个给定位是否有变化
对于select和poll的一些东东会在udev,socket,电源管理中进一步说明
2.标准IO开发
标准带缓冲的IO操作包括三种缓冲存储,全缓冲,行缓冲,不缓冲。
1.
Fopen fclose
FILE *stream;
stream=fopen(“test”,”r”); “r” “w” “a”
Fclose(stream);
Size_t fread(void *ptr,size_t size,size_t nmemb,FILE *stream)
Size_t fwrite(const void *ptr,size_t size,size_t nmemb,FILE *stream)
Size 一条记录的大小
Nmemb 记录的数目
Write返回成功写入的记录数目
例子,
#include<stdio.h>
Int main()
{
FILE *stream;
Char s[3]={‘a’,’b’,’c’};
Stream=fopen(“test”,”w”);
i=fwrite(s,sizeof(char),sizeof(s),stream);
fclose(stream);
}
2.
Fputc(fgetc(stdin),stdout);
Char s[80];
Fputs(fgets(s,80,stdin),stdout);
- linux 文件I/O 编程
- Linux 文件I/O编程
- linux文件I/O编程
- linux文件I/O编程
- Linux系统文件I/O编程(三)---I/O多路复用
- Linux系统文件I/O编程(三)---I/O多路复用
- Linux的文件I/O编程
- Linux文件异步I/O编程解析
- linux系统编程之文件I/O
- 文件I/O编程
- 文件I/O编程
- 文件I/O编程
- 文件I/O编程
- Linux文件I/O
- linux 文件I/O
- Linux文件I/O
- Linux----文件I/O
- LINUX 文件I/O
- [记录]在struct2上配置json Plugin
- DOS上动态显示日期和时间
- 如何从SQL数据库中获取某个字段的类型和长度
- 2009-2011
- JSP的隐含对象
- linux 文件I/O 编程
- 投资理财时代
- Composite (C++实现)
- SWT小试牛刀之scolledComposite
- 准备好致富时代的到来
- linux syscall
- SQL2000 安装详解~及安装问题解决方法
- asp.net 调用存储过程获取多个值
- 码者传说