Chinaunix首页 | 论坛 | 博客
  • 博客访问: 605955
  • 博文数量: 99
  • 博客积分: 5128
  • 博客等级: 大校
  • 技术积分: 1538
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-27 19:40
文章分类

全部博文(99)

文章存档

2012年(3)

2011年(5)

2010年(4)

2009年(31)

2008年(56)

分类: 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值。


umaskflag

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出错。


其他的函数等用到的时候再学习。这章书算是完毕了。

阅读(653) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~