linux高级编程(文件操作)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

文件及设备操作

1.基本概念

linux下文件操作的两种方法:原始文件I/O、标准I/O库

标准I/O库: 是C语言的标准输入输出库,是针对流对象FILE 进行的操作,是带缓存的。

原始I/O库:是linux系统提供的文件API,是针对描述描进行的操作,是无缓存机制。

文件描述符:创建一个新文件或打开现有文件时,内核向进程返回的一个非负整数。

其范围在0~OPENMAX之间,OPENMAX是一个宏,不同linux版本取值不同.

系统调用:是操作系统提供的某些功能的接口(函数)

常用设备

/dev/null 空设备,丢弃数据用

/dev/port 存取I/O端口

/dev/ttyN N(0 1 ...) 字符终端

/dev/sdaN N(0 1...) SCSI磁盘

/dev/scdN N(0 1...) SCSI光驱

/dev/mouseN N(0 1...) 鼠标

/dev/socksys 套接字访问端口接口,用于网络传输

/dev/route 路由器控制设备

/dev/fbN N(0 1...) 帧缓冲设备(frame buffer) 重点

/dev/mixer 混音器音量控制、混音控制重点

/dev/dsp 声卡数字采样和数字录音设备用于播放声音和录音经常使用重点(oss)

/dev/audio 声卡音频设备用于播放声音和录音,支持sun音频较少使用

/dev/video 视频摄像头用于视频采样(录像)

常用头文件

#include 对外提供的各种数据类型如size_t

#include 对外提供的各种结构类型如time_t

#include 对外提供的各种错误号的定义用数字代码的错误类型

#include 文件控制的函数定义

#include 串口的结构及定义

#include 声卡的结构及定义

#include 设备控制函数

#include 在C++内加入的头

2.设备的操作函数

#include

#include

#include

#include

#include

1)Access

功能: 确定文件的访问权限

用法: int access(const char *filename, int amode);

finename 文件名称mode 模式,共5种模式:

0-检查文件是否存在

1-检查文件是否可运行

2-检查文件是否可写访问

4-检查文件是否可读访问

6-检查文件是否可读/写访问

例:判断文件是否存在

int file_exists(char *filename){

return (access(filename, 0) == 0);

}

2)创建文件

int creat(char *pathname,mode_t mode);

pathname:要创建文件的路径文件名。可以使用绝对路径或相对路径。

mode: 新建文件的访问权限,同创建目录

使用时,可用或运算组合使用,如

S_IRUSR | SIWUSR

写可以使用数字,如

666

返回值:成功,返回文件描述符,失败-1

说明:

3)打开文件

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

pathname: 设备或文件名

flags: 文件的打开方式,可以用位运算|组合

O_RDONL Y 只读

O_WRONL Y 只写

O_RDWR 读写模式

O_APPEND 追加模式

O_CREAT 创建文件

O_SYNC 同步。

O_NONBLOCK 非阻塞模式,默认为阻塞模式

O_EXCL 如果定义了O_CREAT,且文件已存在,则出错

O_TRUNC 如果文件存在,且以只读或指写方式打开,则截断文件mode: 可选参数,用于定义新建文件的访问权限,同creat函数

返回值:成功文件描述符失败-1

注:O_RDONL Y、O_WRONL Y、O_RDWR中只能选择一个,然后通过|运算和其它选项组合

O_EXCL与O_CREAT组合实现互斥,文件已存在的情况下,调用失败。

O_WRONL Y|O_CREAT|O_TRUNC组合,则与creat函数等价

对于设备文件,不能使用O_CREAT选项

例:int fd=open("./test.txt",O_CREAT | O_RDWR | O_SYNC);//文件

int fd=open("/dev/dsp",O_RDWR | O_SYNC); //设备

4)文件读写

ssize_t write(int filedes,void *buff, size_t nbytes);

ssize_t read(int filedes,void *buff, size_t nbytes);

filedes: 文件描述符

buff:内存地址,如果用write,则先在buff内填写数据

如果用read,则先准备好一个内存,等待填写

nbytes:要读写的字节数

返回值:成功是实际的读写长度失败-1

注:read、write不仅用于读取文件,而且用于套接字、设备等。

5)文件的关闭

int close(int filedes);

6)文件的删除

int unlink(const char * path)

说明:只是将文件的引用计数减一,只有在引用计数变为0的情况下,才会删除物理文件

7)移动文件指针

off_t lseek(int fd,off_t offset,int whence);

fd:文件描述符

offset: 文件偏移量,是相对于whence的偏移

whence: 文件偏移的起始位置

SEEK_SET 文件头

SEEK_CUR 当前位置

SEEK_END 文件尾开始

返回值:成功,返回新的当前文件指针位置,失败-1

8)设备控制(设置)

#include

int ioctl(int d, int request, ...);

d: 文件枸柄(描述符)

request:用户程序对设备的控制命令,后面的省略号,是补充参数,一般最多一个

返回值:成功0 失败-1

例:int fd=open("/dev/dsp",O_RDWR); //打开设备

int format=8; //音频采样大小

相关文档
最新文档