目录
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
- vi hello.c 打开并创建文本
- 写入主函数,:wd退出并保存,看下使用open()函数需要包含的头文件.
- 复制所需的头文件,并gg=G自动调整代码。代码写好保存并退出(:wq)
- 使用gcc hello.c -o hello 编译并名为hello,生成helllo的可执行文件
- ./hello 执行成功。程序会因为找不到 mm 而打印 open failed!
- 而用 touch mm创建一个mm文件。然后再执行./hello,就会打印 open succeed!
- 上述是使用路径的方式打开,接下来我们直接使用文件名。修改代码。并重新用gcc编译。
- 删除mm 并重新编译代码 发现,也是可以执行成功的。
- 再上述的只读(O_RDONLY)基础上追加一个创建(O_CREAT)功能。保存并退出,并重新编译。
- 加上此功能后,发现代码运行后自动创建了mm。
- ls -l 查看文件权限。
2.3.2O_APPEND的用法
- O_APPEND 表示追加,如果原来文件里面有内容,则这次写入会写在文件的最末尾。使用时,光标默认指向目标文件的末尾。
- 代码编译后运行,发现每运行一次代码,file文件里的内容都会在旧的内容后面追加一次。 cat file ,查看file文件里面的内容。