基于文件描述符的文件操作(非缓冲)
 
| 1、文件描述符  内核为每个进程维护一个已打开文件的记录表,文件描述符是一个较小的正整数(0—1023),它代表记录表的一项,通过文件描述符和一组基于文件描述符的文件操作函数,就可以实现对文件的读、写、创建、删除等操作。常用基于文件描述符的函数有open(打开)、creat(创建)、close(关闭)、read(读取)、write(写入)、ftruncate(改变文件大小)、lseek(定位)、fsync(同步)、fstat(获取文件状态)、fchmod(权限)、flock(加锁)、fcntl(控制文件属性)、dup(复制)、dup2、select和ioctl。基于文件描述符的文件操作并非ANSI C的函数,是LINUX独有的东西。  如果不清楚某个函数的具体实现形式,可以通过下面的方式查询  man  函数名  查看该函数的帮助  | ||||||||||||||||||||||||||||||||||||
| 2、打开、创建和关闭文件 open和creat都能打开和创建函数,原型为  #include <sys/types.h>      //头文件  #include <sys/stat.h>  #include <fcntl.h>  int open(const char \*pathname, int flags);                 //文件名  打开方式  int open(const char \*pathname, int flags, mode\_t mode);    //文件名  打开方式  权限,open()函数出错时返回-1  int creat(const char \*pathname, mode\_t mode);              //文件名  权限   //现在已经不常用了(因为有上面的函数)  creat函数等价于→open(pathname,O\_CREAT|O\_TRUNC|O\_WRONLY,mode);  flags和mode都是一组掩码的合成值,flags表示打开或创建的方式,必须加上打开方式,mode表示文件的访问权限。  | ||||||||||||||||||||||||||||||||||||
| flags的可选项有: 
 | ||||||||||||||||||||||||||||||||||||
| mode的可选项有: 
 但是通常采用直接赋数值的形式,如:  int fd=open(argv\[1\],O\_CREAT|O\_RDONLY,0666);  注意:LINUX中基于文件描述符的 open 函数,对于一个不存在的文件,不能通过 O\_WRONLY 的方式打开,必须加上 O\_CREAT 选项。  close用于文件的关闭:  int close(int fd); //fd表示文件描述词,是先前由open或creat创建文件时的返回值。  文件使用完毕后,应该调用close关闭它,一旦调用close,则该进程对文件所加的锁全都被释放,并且使文件的打开引用计数减1,只有文件的打开引用计数变为0以后,文件才会被真正的关闭。  | 
| //o\_creat.c #include<stdio.h>  #include<sys/types.h>  #include<sys/stat.h>  #include<fcntl.h>  #include<unistd.h>  int main(int argc,char \*\* argv)  {          int fd = open(argv\[1\],O\_CREAT|O\_RDONLY,0666);          printf("ret = %d\\n",ret);          close(fd);          return 0;  }  | //(创建文件默认减去掩码0002) | 
open 函数中的fiags (O\_RDWR|O\_CREAT|O\_EXCL)表示在创建文件时不确定系统有没有人创建过这个文件,就加上O\_EXCL,表示如果系统存在相应文件就强制失败
 
 
  
  
  
 
 
 
 
 