Linux学习笔记之--低级(底层)文件库编程
来源:互联网 发布:辣椒水喷雾剂淘宝有吗 编辑:程序博客网 时间:2024/06/15 11:35
3:低级文件编程库(底层文件编程库)
3.1: 文件的打开与创建
#include <fcntl.h>
int open(const char *filename, int oflag, .../*[mode_t mode]*/)
本函数共有三个参数:要打开或创建文件的路径名;oflag指定打开或创建
的方式;mode是可选参数决定新文件的模式,仅当创建文件时有效
调用成功时为filename创建一个描述符并返回,否则返回-1.
oflag的取值:
a:读写方式:
O_RDONLY 以只读方式打开文件
O_WRONLY 以只写方式打开文件
O_RDWR 以读写方式打开文件
b:常规方式:
O_APPEND 追加方式打开文件,写操作时先移动到文件末尾再添加数据
O_CREAT 文件不存在时创建文件,创建的模式由open第三个参数决定
O_EXCL 与O_CREAT一起使用,当文件不存在时则创建,否则open调用失败
O_NDELAY 非阻塞标志,在该文件上的读写操作立刻返回无须等待
O_NONBLOCK 同上
O_TRUNC 加上此标志文件将被清空
c: 同步方式
O_DSYNC 任何写操作都导致进程阻塞,直到物理的写动作完成
O_SYNC 包含O_DSYNC含义,可更新文件各个属性
O_RSYNC--
|
O_DSYNC--
O_RSYNC--
|
O_SYNC---
O_RSYNC不能单独使用,如果O_DSYNC和O_SYNC同时被设置,只有后者有效
例1:只读方式打开/etc/passwd
int fno;
if ((fno = open("/etc/passwd", O_RDONLY)) < 0)
return ;
例2:以0755创建文件/tmp/t1
int fno;
if ((fno = open("/tmp/t1", O_WRONLY|O_CREAT|O_EXCL, 0755)) < 0)
return ;
3.2: 文件的关闭与删除
#include <unisted.h>
int close(int fildes)
int unlink(char *path)
3.3: 文件读
函数read从打开的文件中读取数据
#include <unistd.h>
ssize_t read(int filedes, void *buff, size_t nbytes);
从filedes中读取nbytes个字节数据到buff,如果成功返回读到的字节数
(不一定等于nbytes)如果文件结尾或nbytes=0,返回0,错误返回-1.
3.4: 文件写
#include <unistd.h>
ssize_t write(int filedes, const void *buff, size_t nbytes)
将buff所指内存的数据向filedes所指的文件中写入nbytes个字节返回成功写入字节数
3.5: 文件的定位
#include <unistd.h>
off_t lseek(int fildes, off_t offset, int whence);
改变文件流的访问位置,成功返回当前位置距文件位移,否则-1.
3.6: 文件缓冲
#include <unistd.h>
int fsync(int filedes);
将写入filedes中的数据真正写入磁盘中成功返回0
3.7: 复制文件描述符
#include <unistd.h>
int dup(int fildes)
int dup2(int fildes, int fildes2)
dup将fildes复制到当前未使用的最小可用描述符中
dup2将fildes复制到fildes2中,返回新描述符
3.8: 文件控制函数fcntl
#include <fcntl.h>
int fcntl(int fildes, int cmd);
int fcntl(int fildes, int cmd, int arg);
int fcntl(int fildes, int cmd, struct flock * arg);
fcntl对fildes执行各种控制命令,cmd确定具体命令以及是否需要第三个参数
cmd可选择的命令如下:
a:F_DUPFD 返回大于等于第三个参数的最小可用文件描述符
fcntl(fildes, F_DUPFD, 0);
b:F_GETFD 返回fildes的标志
c:F_SETFD 以参数arg设置fildes
d:F_GETOWN 获取SIGIO或SIGURG的ID
e:F_SETDOW 以arg设置SIGIO或SIGURG的ID
g:F_GETLK, F_SETLK, F_SETLKW获得或设置记录锁
h: F_GETFL 返回fildes的打开方式
i: F_SETFL 以参数arg设置文件的打开方式
3.9: 文件锁
int fcntl(int fildes, int cmd, struct flock *arg);
flock结构体用于描述文件锁的信息
struct flock
{
short l_type; 锁类型:F_RDLCK(读),F_WRLCK(写),F_UNLCK(释放)
short l_whence; 锁区域开始的位置:SEEK_SET,SEEK_CUR,SEEK_END
logn l_start; 锁区域开始位置的偏移量与l_whence共同确定锁区域
long l_len; 锁区域的长度,0表示锁至文件末尾
short l_pid; 拥有锁的进程ID号
};
fcntl专用于锁操作时,参数cmd的三种取值.
a: F_GETLK 返回fildes对应文件中指定区域的文件锁信息,成功返回非负数否则-1
b: F_SETLK 设置锁
c: F_SETLKW F_SETLK的阻塞版本
3.1: 文件的打开与创建
#include <fcntl.h>
int open(const char *filename, int oflag, .../*[mode_t mode]*/)
本函数共有三个参数:要打开或创建文件的路径名;oflag指定打开或创建
的方式;mode是可选参数决定新文件的模式,仅当创建文件时有效
调用成功时为filename创建一个描述符并返回,否则返回-1.
oflag的取值:
a:读写方式:
O_RDONLY 以只读方式打开文件
O_WRONLY 以只写方式打开文件
O_RDWR 以读写方式打开文件
b:常规方式:
O_APPEND 追加方式打开文件,写操作时先移动到文件末尾再添加数据
O_CREAT 文件不存在时创建文件,创建的模式由open第三个参数决定
O_EXCL 与O_CREAT一起使用,当文件不存在时则创建,否则open调用失败
O_NDELAY 非阻塞标志,在该文件上的读写操作立刻返回无须等待
O_NONBLOCK 同上
O_TRUNC 加上此标志文件将被清空
c: 同步方式
O_DSYNC 任何写操作都导致进程阻塞,直到物理的写动作完成
O_SYNC 包含O_DSYNC含义,可更新文件各个属性
O_RSYNC--
|
O_DSYNC--
O_RSYNC--
|
O_SYNC---
O_RSYNC不能单独使用,如果O_DSYNC和O_SYNC同时被设置,只有后者有效
例1:只读方式打开/etc/passwd
int fno;
if ((fno = open("/etc/passwd", O_RDONLY)) < 0)
return ;
例2:以0755创建文件/tmp/t1
int fno;
if ((fno = open("/tmp/t1", O_WRONLY|O_CREAT|O_EXCL, 0755)) < 0)
return ;
3.2: 文件的关闭与删除
#include <unisted.h>
int close(int fildes)
int unlink(char *path)
3.3: 文件读
函数read从打开的文件中读取数据
#include <unistd.h>
ssize_t read(int filedes, void *buff, size_t nbytes);
从filedes中读取nbytes个字节数据到buff,如果成功返回读到的字节数
(不一定等于nbytes)如果文件结尾或nbytes=0,返回0,错误返回-1.
3.4: 文件写
#include <unistd.h>
ssize_t write(int filedes, const void *buff, size_t nbytes)
将buff所指内存的数据向filedes所指的文件中写入nbytes个字节返回成功写入字节数
3.5: 文件的定位
#include <unistd.h>
off_t lseek(int fildes, off_t offset, int whence);
改变文件流的访问位置,成功返回当前位置距文件位移,否则-1.
3.6: 文件缓冲
#include <unistd.h>
int fsync(int filedes);
将写入filedes中的数据真正写入磁盘中成功返回0
3.7: 复制文件描述符
#include <unistd.h>
int dup(int fildes)
int dup2(int fildes, int fildes2)
dup将fildes复制到当前未使用的最小可用描述符中
dup2将fildes复制到fildes2中,返回新描述符
3.8: 文件控制函数fcntl
#include <fcntl.h>
int fcntl(int fildes, int cmd);
int fcntl(int fildes, int cmd, int arg);
int fcntl(int fildes, int cmd, struct flock * arg);
fcntl对fildes执行各种控制命令,cmd确定具体命令以及是否需要第三个参数
cmd可选择的命令如下:
a:F_DUPFD 返回大于等于第三个参数的最小可用文件描述符
fcntl(fildes, F_DUPFD, 0);
b:F_GETFD 返回fildes的标志
c:F_SETFD 以参数arg设置fildes
d:F_GETOWN 获取SIGIO或SIGURG的ID
e:F_SETDOW 以arg设置SIGIO或SIGURG的ID
g:F_GETLK, F_SETLK, F_SETLKW获得或设置记录锁
h: F_GETFL 返回fildes的打开方式
i: F_SETFL 以参数arg设置文件的打开方式
3.9: 文件锁
int fcntl(int fildes, int cmd, struct flock *arg);
flock结构体用于描述文件锁的信息
struct flock
{
short l_type; 锁类型:F_RDLCK(读),F_WRLCK(写),F_UNLCK(释放)
short l_whence; 锁区域开始的位置:SEEK_SET,SEEK_CUR,SEEK_END
logn l_start; 锁区域开始位置的偏移量与l_whence共同确定锁区域
long l_len; 锁区域的长度,0表示锁至文件末尾
short l_pid; 拥有锁的进程ID号
};
fcntl专用于锁操作时,参数cmd的三种取值.
a: F_GETLK 返回fildes对应文件中指定区域的文件锁信息,成功返回非负数否则-1
b: F_SETLK 设置锁
c: F_SETLKW F_SETLK的阻塞版本
0 0
- Linux学习笔记之--低级(底层)文件库编程
- Linux学习笔记之---标准文件库编程
- Linux学习笔记之---目录文件编程库
- linux C 学习笔记(二):底层文件访问
- 第六节 低级文件编程库
- LS8-linux系统调用方式文件编程之学习笔记
- linux学习之文件编程
- Linux学习笔记之---文件
- Linux之文件学习笔记
- 专题5 低级文件编程
- linux编程学习笔记(七) 文件IO
- linux 编程之库的使用(学习笔记)
- Linux+C学习笔记之IO编程
- Linux+C学习笔记之网络编程
- 嵌入式linux学习笔记之网络编程
- Linux学习笔记之SHELL编程
- Linux-网络编程学习笔记之tcp
- 《Linux Shell编程学习笔记之三》
- CarrerCup-机器人走二维网格
- WEB标准
- ZigBee入门之端口---硬件中端口的概念
- break和continue的区别
- mysql 学习笔记 day04
- Linux学习笔记之--低级(底层)文件库编程
- NYOJ---题目27水池数目
- Linux Unbutu系统下进行jdk版本切换
- LeetCode Repeated DNA Sequences
- java中public/private/protected区别
- Linux学习笔记之---目录文件编程库
- new和malloc的区别及内存管理及char[]与char*区别
- Linux学习笔记之---进程
- LinkedHashMap和HashMap的比较使用