分类: LINUX
2008-07-08 12:54:07
include 的目录
在 /usr/include 目录就是包含头文件的所在地
最基本的系统调用:
open close read write
文件描述符
很简单,就是一个int 的正整数。
一般需要包含下面几个头文件件
#include
#include
标准的库文件
#include
#include
#include
以上是open调用需要的头文件
#include
以上是 close read write 需要用到的头文件
int open(const char *pathname,int flags, mode_t mode);
int open(const char *pathname,int flags);
两种调用模式,看是否需要修改 umask 而定。
入口:
pathname就是文件的名字,用具体的路径,或者就单个名字,表示当前目录
flag访问该文件的方式,只读,只写,读写,创建,追加等,跟标准C函数里面的API非常的像。也好理解。大概常用的
O_CREAT O_RDONLY O_WRONLY O_APPEND O_TURNC O_RDWR 都是英文的简写,不难记忆。
打开一个文件描述符,使用完之后必须关闭。关闭很简单。
close(fd) 就ok了
读文件
ssize_t read(int fd,const void *buf,size_t count)
入口参数
fd为文件安描述符,buf是缓冲区的指针,count为需要读取的数据大小
出口参数
成功则返回读出字节数,出错则返回 -1,遇到文件结束符号EOF,则返回0
写文件
ssize_t write(int fd,const void *buf,size_t count)
跟read一模一样的,只是write没有文件结束EOF这个概念,其他都一样。
关于umask
这个是用来控制用户访问的,默认是 022 (八进制)当然可以自己修改
mode_t umask(mode_t value)
调用之后返回原来的umask值。
umask和flag
open操作可以控制这两个参数。这是不同的概念,根据我的理解,flag是文件的访问模式,跟C语言的文件操作比较就知道,只读,只写,追加等。而umask是控制用户访问权限。
fstat
文件属性,这个是很重要的,知道文件属性对于编程有很大的帮助。
fstat(int fd,struct stat *buf)
文件有很多个属性,但是具体只对几个关心,暂时对 st_size是文件的大小敢兴趣。其他在用到的时候再查 struct stat 结构就知道了
fcntl
就是 file control 的简写了,文件访问控制函数,fcnt可以建立读取锁(共享锁)和写入锁(排斥锁),简单点说,就是读取锁可以建立多个,但是当某进程需要写入文件,则建立一个写入锁,其他进程不能访问该文件,所谓的排斥。
#include
#include
int fcntl(int fd,int cmd,struct flock *lock)
入口:
fd文件描述符
cmd是命令,其中两个用的最多的 F_GETLK F_SETLK 分别就是读取和设置锁。其他还有可以参考详细资料。
Struct flock 这个结构比较重要,里面包含了文件加锁的很多信息。
例如一个定义Struct flock lock 下面的几个成员
lock.whence SEEK_SET lseek的那个定义类似
lock.star 0 从0开始
lock.len 1 加锁的长度,1byte
lock.l_type F_UNLCK F_RDLCK R_WRLCK 这3个常用的
lock.l_pid 被哪个进程加锁了
出口参数
0 则锁操作成功,-1出错。
其他的函数等用到的时候再学习。这章书算是完毕了。