当前位置: 首页 > news >正文

二、Linux文件 - Open函数讲解实战

目录

1.Open函数讲解

2.open函数实战

2.1 man 1 ls 查询Shell命令

2.2 man 2 open 查看系统调用函数

2.3项目实战

2.3.1O_RDWR和O_CREAT

 2.3.2O_APPEND的用法



1.Open函数讲解

高频使用的Linux系统调用:open   write   read   close

Linux自带的工具:man手册:

man 1是普通的shell命令,例如 ls    输入:man 1 ls

man2是系统调用函数,比如open,write说明    输入:man 2 open

在Linux系统库的定义:

int open(const char *pathname, intflags);   /*比较常用*/
int open(const char *pathname, intflags, mode_tmode);
//包含的头文件
#include <sys/types.h>//这里提供的类型pid_t和size_t的定义
#include <sys/stat.h>
#include <fcutl.h>

返回值

  • 成功,返回句柄,我们后面对于文件的读写,关闭等都通过句柄来操作。
  • 失败,返回-1

参数说明

  • grep -nr "xxxx" ./   可以通过这个指令来查找底层的宏O_RDONLY。
  • pathname:文件的路径名,如果只写文件名,就默认当前目录,如果在文件名加上路径,就按照绝对路径来打开文件。
  • flags:表示打开文件后用的操作
    • 底层是一个宏,它可以以16进制的形式存放。

      O_RDONLY:只读模式0x 0000 0000

      O_WRONLY:只读模式0x 0000 0001

      O_RDWR:可读可写0x 0000 0002

    • 参数说明

    • O_APPEND 表示追加,如果原来文件里面有内容,则这次写入会写在文件的最末尾。0x00002000
    • O_CREAT 表示如果指定文件不存在,则创建这个文件 0x0000 0100
    • O_EXCL 表示如果要创建的文件已经存在,则出错,同时返回-1,并且修改errno的值
    • O_TRUNC 表示截断,如果文件存在,并且以只写、读写方式打开,则将其长度截断为0
    • O_NOCTTY 如果路径名指向终端设备,不要把这个设备用作控制终端

2.open函数实战

2.1 man 1 ls 查询Shell命令

  •  终端输入 man 1 ls,可以看到有名字、参数、描述。-a是ls后面追加的一些参数和对应的用法。q退出。

2.2 man 2 open 查看系统调用函数

  •  终端输入 man 2 open,查看系统调用函数,可以看到有名字、参数、描述。
    • 这是一个调用open 函数的栗子。
  • 在库函数的文件中查找宏:

2.3项目实战

2.3.1O_RDWR和O_CREAT

  1. vi hello.c 打开并创建文本
  2. 写入主函数,:wd退出并保存,看下使用open()函数需要包含的头文件.
  3. 复制所需的头文件,并gg=G自动调整代码。代码写好保存并退出(:wq)
  4. 使用gcc hello.c -o hello 编译并名为hello,生成helllo的可执行文件
  5. ./hello 执行成功。程序会因为找不到 mm 而打印 open failed! 
  6. 而用 touch mm创建一个mm文件。然后再执行./hello,就会打印 open succeed!
  7. 上述是使用路径的方式打开,接下来我们直接使用文件名。修改代码。并重新用gcc编译。
  8. 删除mm 并重新编译代码 发现,也是可以执行成功的。
  9. 再上述的只读(O_RDONLY)基础上追加一个创建(O_CREAT)功能。保存并退出,并重新编译。
  10. 加上此功能后,发现代码运行后自动创建了mm。
  11. ls -l 查看文件权限。

 2.3.2O_APPEND的用法

  1. O_APPEND 表示追加,如果原来文件里面有内容,则这次写入会写在文件的最末尾。使用时,光标默认指向目标文件的末尾。
  2. 代码编译后运行,发现每运行一次代码,file文件里的内容都会在旧的内容后面追加一次。   cat file ,查看file文件里面的内容。

相关文章:

  • Matlab 点云迭代加权最小二乘法拟合平面(抑制噪声)
  • XCP实战系列介绍08-基于Vehicle Spy进行XCP测量的工程配置详解
  • 某程序员去华为面试,因为错了一道题而被淘汰
  • Mysql 数据类型
  • 尚医通(八) Nginx
  • npoi word 里面厂家操作
  • 若依框架---分页功能
  • ESP8266 + STC15基于AT指令通过TCP通讯协议控制IO状态
  • 【H5】html实现微信授权登陆
  • Lesson 6.3 正则化与 sklearn 逻辑回归参数详解
  • 【C语言】指针基础(详细知识梳理)
  • 二叉搜索树——BinarySearchTree
  • 【Python】Numpy数值积分
  • 【Spring】Bean的生命周期详解
  • 【虚拟仿真】Unity3D中实现InputField组件表格Tab或者Enter换行实现
  • 【微服务】ES使用实战·黑马旅游(五)
  • JavaScript(三)-全面详解(学习总结---从入门到深化)
  • Windows Server 2022 Install Sql Server 2022
  • Openharmony的用户态应用通过HDF框架驱动消息机制实现的通信实例
  • 程序员为什么要写技术博客?都在哪些平台呢?
  • 专访|松重丰:“美食家”不孤独,他在自由地吃饭
  • 全球南方声势卓然壮大的历史逻辑——写在万隆会议召开70周年之际
  • 经济日报金观平:拥抱中国就是拥抱确定性
  • 秦洪看盘|量能虽萎缩,但交易情绪尚可
  • 黄仁勋:英伟达坚定不移服务中国市场,AI将在每个行业引发颠覆性变革
  • 2025年中国航天工程有哪些重点任务?国家航天局介绍