二、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文件里面的内容。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值