• 【APUE】第3章 文件I/O (1) 函数open、close使用说明


    1、文件描述符

    对于内核来说,所有打开的文件都通过文件描述符来引用。文件描述符是一个非负整数。当打开一个现有的文件或者创建一个新文件时,内核向进程返回一个文件描述符。当读、写一个文件时,使用open或creat返回文件描述符描述符标识该文件,将其作为参数传递给read或者write函数。通常文件描述符0与进程的标准输入关联、文件描述符1与进程的标准输出关联、文件描述符2与进程的标准错误相关联。但是在POSIX标准中,应该把他们替换成符号常量STDIN_FILENO、STDOUT_FILENO和STDERR_FILENO以提高可读性,这些常量通常在头文件<unistd.h>中。

    2、函数open说明

    转自 https://blog.csdn.net/dangzhangjing97/article/details/79631173 仅供个人学习使用

    查看相关man page使用命令man 2 open (如果出现 No manual entry for open in section 2,则需要使用 yum install man-pages命令(centos下)下载)。

    函数原型说明:

    1 头文件:#include<fcntl.h>
    2 功能:打开和创建文件(建立一个文件描述符,其他的函数可以通过文件描述符对指定文件进行读取与写入的操作。)
     1 int open(const char*pathname, int flags);
     2 int open(const char*pathname, int flags, mode_t mode);
     3 参数说明:
     4 (1)pathname
     5   要打开或创建的目标文件
     6 (2).flags
     7   打开文件时,可以传入多个参数选项,用下面的一个或者多个常量进行“或”运算,构成falgs
     8 参数:
     9 (1)这三个常量,必须指定一个且只能指定一个
    10  O_RDONLY:    只读打开
    11  O_WRONLY:   只写打开
    12  O_RDWR:     读,写打开
    13 
    14 (2)下列常量是可选的(总共有数十个,这里给出最常用的2个):
    15  O_CREAT:    若文件不存在,则创建它,需要使用mode选项。来指明新文件的访问权限
    16  O_APPEND:   追加写,如果文件已经有内容,这次打开文件所写的数据附加到文件的末尾而不覆盖原来的内容

    返回值说明:

    1 成功:返回新打开的文件描述符,通常大于等于3
    2 失败:返回-1
    3 open返回的文件描述符一定是最小的而且没有被使用的

    函数fopen与函数open的区别:

    1 以可写的方式fopen一个文件时,如果文件不存在则会自动创建,而open一个文件时必须明确O_CREAT才会创建文件,否则文件不存在就出错返回。

    3、函数close说明

    函数原型说明:

    1 头文件:#include<unistd.h>
    2 功能:关闭一个已经打开的文件
    3 int close(int fd)
    4 参数说明:fd:是需要关闭的文件描述符

     函数返回值说明:

    1 成功:返回0;
    2 失败:返回-1,并设置errno

     注意:打开的文件描述符要进行关闭操作,否则会占用大量资源,导致内存不够用。

    4、程序举例

    (1)使用open函数以写的形式打开一个已经存在的空文件myfile

    程序截图:

    运行结果截图:

    (2)使用open函数以读写的形式打开一个已经存在的文件myfile

    程序截图:

    运行结果截图:

    (3)使用open函数以写的形式打开一个不存在的文件file

    程序截图:

    运行结果截图:

  • 相关阅读:
    EF性能之关联加载
    【迁移】—Entity Framework实例详解
    GRIDVIEW多行多列合并单元格(合并列)
    使用Word2013发布随笔到博客园
    课堂资料下载-有问题加群-为杜绝有广告泛滥.固加群收费.
    strstr ShellCode实现
    X86保护模式入门简介
    WDK7600编译器环境配置
    内核驱动驱动对象 Driver_OBJECT
    基本的三角函数总结
  • 原文地址:https://www.cnblogs.com/xuelisheng/p/10797561.html
Copyright © 2020-2023  润新知