文件描述符

[root@db code]# more code1.c 
/*文件描述符 */
/*
* 在Linux下文件描述符来表示设备文件和普通文件,文件描述符是一个整型数据,所有对
  文件的操作都是通过文件描述符实现

* 文件描述符是文件系统中链接用户空间和内核空间的枢纽,当打开一个或创建一个文件时
  ,内核空间创建响相应的结构,并生成一个整型的变量传递给用户空间的对应进程。

* 进程用文件描述符来对文件进行操作。

* 文件描述符的范围是0~OPEN_MAX,因此是一个有限资源,用完以后要及时释放,通常是调用
  close()函数关闭。

* 文件描述符的值仅在同一个进程中有效,即不同文件描述符,同一个值很可能描述的不是同
  一个设备或普通文件。

* 在Linux中有3个已经分配的文件描述符,即标准输入,输出和标准错误,它们的文件描述符
  的值分别为0,1,2,可以看到/dev/下的stdin,stdout,stderr,分别指向/proc/self/fd/目录
  下的0,1,2文件。
*/

/*
* 函数open()打开一个已经存在的文件或者创建一个新文件,create()函数用于创建一个新文 
  件
* 函数open(),create()介绍
* 这两个函数的原型如下,根据用户设置的标志flags和模式mode在路径pathname下建立或者打开一个文件 */

 在使用以上函数的时候,注意,需要包含头文件sys/types.h,sys/stat.h和fcntl.h

 open()函数打开pathname指定的文件,当函数成功时,返回一个整型的文件描述符,这个函数正常情况下会返回一个文件描述符的值,在出错时候会返回-1.

    打开文件的时候需要指定打开的文件路径,这个参数由pathname指定,函数会根据这个参数的值在路径中查找文件并试图打开或者建立文件。pathname所之的为一个字符串变量,这个变量的长度在不同的系统下其最大长度是有差别,通常为1024个字节,当所给的路径长度大于該值,系统会对字符串进行截断,仅选择最前面的字节进行操作。

文件的打开标志flags用于设置文件打开后允许的操作方式,可以为只读,只写或者可以进行读写。分别为O_RDONLY(只读‘0’) O_WRONLY(只写‘1’) O_RDWR(读写‘2’)

打开一个文件代码

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
int main(void)
{
    int fd = -1;
    char filename[] = "test.txt";
    fd = open(filename,O_RDWR);
    if(-1 == fd){
        printf("open file %s failure!fd:%d
",filename,fd);
    }else{
        printf("open file %s success!fd:%d
",filename,fd);
    }
    return 0;
}

0pen还可打开设备文件

O_CREAT 可以创建文件,与O_EXCL结合使用可以编写容错的程序。

原文地址:https://www.cnblogs.com/changbo/p/4969778.html