/*文件控制选项头文件。主要定义了函数fcntl和open中用到的一下选项*/

#ifndef _FCNTL_H
#define _FCNTL_H
#include<sys/types.h>/*类型头文件,定义了基本的系统数据类型*/

#define O_ACCMODE		00003			//文件访问模式屏蔽码
#define O_RDONLY		00        //只读方式打开
#define O_WRONLY		01        //只写方式打开
#define O_RDWR			02        //以读写方式打开文件
#define O_CREAT			00100     //文件不存在,就创建
#define O_EXCL			00200     //独占使用文件标志
#define O_NOCTTY		00400     //不分配终端
#define O_TRUNC			01000     //若文件已存在且是写操作,则长度截为0
#define O_APPEND		02000     //追加方式打开,文件指针置为文件尾
#define O_NONBLOCK	04000     //非阻塞方式打开和操作文件
#define O_NDELAY		O_NONBLOCK//非阻塞方式打开和操作文件
                              //
#define F_DUPFD			0         //拷贝文件句柄为最小值且没有使用的句柄
#define F_GETFD			1         //取文件句柄标志
#define F_SETFD			2         //设置文件句柄标志
#define F_GETFL			3         //取文件状态标志和访问模式
#define F_SETFL			4         //设置文件状态标志和访问模式
#define F_GETLK			5         //返回阻止锁定的flock结构
#define F_SETLK			6         //设置(F_RDLCK或F_WRLCK)或清除锁定
#define F_SETLKW		7         //等待设置或清除锁定

//在执行exec簇函数时关闭文件句柄
#define FD_CLOEXEC	1         //
                              //
#define F_RDLCK			0         //共享或读文件锁定
#define F_WRLCK			1         //独占或写文件锁定
#define F_UNLCK			2         //文件解锁

//没有实现。文件锁定操作数据数据结构,描述受影响文件段的类型(l_type)开始偏移
//(l_whence),相对偏移(l_start),锁定长度(l_len)和实施锁定的进程id
struct flock{
				short l_type;   //锁定类型(F_RDLCK,F_WRLCK,F_UNLCK)
				short l_whence;  //开始偏移(SEEK_SET,SEEK_CUR,SEEK_END)
				off_t l_start;  //阻塞锁定的开始处.相对偏移
				off_t l_len;    //阻塞锁定的大小,如果是0则为文件末尾
				pid_t l_pid;    //加锁的进程id
	};

/*
*创建新文件或重写一个存在的文件
*/
extern int creat(const char*filename,mode_t mode);

/*
*文件句柄操作,会影响文件的打开
*/
extern int fcntl(int files,int cmd,...);
//打开文件。在文件与文件句柄之间建立联系
extern int open(const char*filename,int flags,...);

#endif

Logo

更多推荐