2014-07-29 23:36:10
在linux下用文件描述符来表示设备文件和普通文件。文件描述符是一个整型的数据,所有对文件的操作都通过文件描述符实现。
文件描述符示文件系统中连接用户空间和内核空间的枢纽。当打开一个或者创建一个文件时,内核空间创建相应的结构,并生成一个整型的变量传递给用户空间的对应进程。进程用这个文件描述符来对文件进行操作。
文件描述符的范围示0~OPEN_MAX,因此是一个有限的资源,在使用完毕后要及时释放,通常示调用从close()函数关闭。注意的是文件描述符的值仅在同一个进程中有效,即不同进程文件描述符,同一个值很可能描述的不是同一个设备或普通文件。在里linux系统中有3个已经分配的文件描述符,即标准输入,标准输出和标准错误,他们文件描述符的值分别问0 1 和2。可以查看/dev/下的stdin(标准输入) stout(标准输出)和stderr(标准错误),会发现分别指向/PRoc/self/fd/目录下的0 1 2文件。
1. 打开创建文件open(),creat()函数
查看函数功能可在终端输入 man 2 open,此手册包含了函数所含头文件,函数功能,函数参数取值
函数原型为:int open(const char *pathname,int flags);
int open(const char *pathname,int flags,mode_t mode);
两者差别在于flags取值,当你man 2 open的时候你会看到flags的取值,当flags使用O_CREAT时要指定mode的值,其实就是创建文件比说明权限!
以下是一个简单的打开文件的程序:
1 #include <sys/types.h> 2 #include <sys/stat.h> 3 #include <fcntl.h> 4 #include <stdio.h> 5 6 int main(void) 7 { 8 int fd = -1; //文件描述符声明 9 char filename[] = "text.txt";//打开的文件名10 fd = open(filename,O_RDWR); //打开的方式为可读写方式11 if(fd == -1) //打开失败12 {13 printf("open file s% is failed!,fd:%d/n",filename,fde);14 }15 else //打开成功16 {17 printf("open file s% sucess!,fd:%d/n",filename,fd);18 }20 return 0;21 }
新闻热点
疑难解答