文件描述符:
1、对于内核而言,所有打开文件都由文件描述符引用。文件描述符是一个非负整数。当打开一个现存文件或者创建一个新文件时,内核向进程返回一个文件描述符。当读写一个文件时,用open和creat返回的文件描述符标识该文件,将其作为参数传递给read和write。
2、文件描述符,这个数字一个进程中表示一个特定含义,当我们open一个文件时,操作系统在内存中构建了一些数据结构来表示这个动态文件,然后返回给应用程序一个数字作用文件描述符,这个数字和我们内存中维护的这个动态文件的这些数据结构绑定上了,以后我们应用程序如果操作这个动态文件,只需要用这个文件描述符区分。
3、文件描述符的作用域就是当前进程,出了这个进程文件描述符就没有意义了
open函数
下面展示一些 内联代码片
。
打开成功,返回文件描述符
打开失败,返回-1
int open(const char *pathname,int flags);
int open(const char *pathname,int flags,mode_t mode);
Pathname:要打开的文件名(含路径,缺省为当前路径)
Flags:
O_RDONLY 只读打开 O_WRONLY 只写打开 O_RDWR可读可写打开
当我们附带了权限后,打开的文件就只能按照这种权限来操作。
以上这三个参数中应当指定一个。下列常数可选择的:
O_CREAT 若文件不存在则创建它。使用此选项时,需要同时说明第三个参数mode,用其说明该新文件的存取许可权限。
O_EXCL 如果同时制定了O_CREAT,而文件已经存在,则出错。
O_APPEND 每次写时都加到文件的尾端。
O_TRUNC 属性去打开文件时,如果这个文件中本来是有内容的,而且为只读或只写成功打开,则将其长度截断为0(相当于清屏)
Mode:一定是在flags中使用了O_CREAT标志,mode记录待创建的文件的访问权限
- 可读 r 4
- 可写 w 2
- 执行 x 1
例如0600,6是代表可读可写,第三个0是同组,第四个0是其它组。
返回值:成功返回0,失败返回-1,可以用perror()函数查看错误
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
int main()
{
int fd;
fd = open("./file1",O_RDWR);
printf("fd = %d\n",fd);
if(fd == -1){
printf("open file error!\n");
fd=open("./file1",O_RDWR|O_CREAT,0600);
if(fd > 0){
printf("Creating a successful!\n");
}
}
printf("fd = %d\n",fd);
return 0;
}
creat函数
下面展示一些 内联代码片
。
close函数不做介绍了,参数就是文件描述符,直接调用就行,下面代码已经展示
int creat(const char *filename,mode_t mode)
filename:要创建的文件名(包含路径、却省为当前路径)
mode:创建模式 //可读可写可执行
常见创建模式:
宏表示 数字
S_IRUSR 4 可读
S_IWUSR 2 可写
S_IXUSR 1 可执行
S_IRWXU 7 可读、写、执行
返回值:成功返回新的文件描述符,错误返回-1。
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
int main()
{
int fd;
char *buf="text";
// int creat(const char *pathname, mode_t mode);
fd = creat("./file1",S_IRWXU);
close(fd);
return 0;
}