700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Linux 系统编程-文件IO-文件描述符 open函数的使用 实现touch命令

Linux 系统编程-文件IO-文件描述符 open函数的使用 实现touch命令

时间:2023-07-18 22:16:33

相关推荐

Linux 系统编程-文件IO-文件描述符 open函数的使用 实现touch命令

author:zengzhi

利用open 函数实现touch 命令

//author:zengzhi#include <stdio.h>#include <unistd.h>#include <fcntl.h>int main(int argc,char *argv[]){int fd;fd=open(argv[1],O_CREAT|O_RDWR,0777);if(fd<0){printf("cread %s file fail\n",argv[1]);return -1;}printf("cread %s file suceess,fd=%d\n",argv[1],fd);close(fd);return 0;}

gcc -o touch touch.c

其中:

1、open 函数:

open(char *, flag, mode)在fcntl.h文件中声明。函数的作用:创建或打开某个文件,参数:最多有三个参数;

第一个参数,char * 包含有文件名和路径

第二个参数:flag 打开文件的方式

第三个参数:mode 创建文件的权限。

打开一个文件,第三个参数没有。创建一个文件,需要有第三个参数

flag内容如下:

flag 功能

O_RDONLY 只读

O_WRONLY 只写

O_RDWR 读写

O_CREAT 创建一个文件

O_EXCL 如果使用O_CREAT时文件存在,则可返回错误消息。这一 参数可测试文件是否存在。

O_TRUNC 打开文件(会把已经存在的内容给删除)。

O_APPEND 追加方式打开文件(不会把已经存在的内容给删除)。

返回值:

成功:文件描述符,它是一个非负的正整数,即文件的ID号,相当于人的身份证号;

文件描述符中:0表示的标准输入,1表示标准输出, 2表示标准出错输出

出错:-1。

Open 函数创建文件时的权限是:

== mode & (~umask)

B111 111 111 & ~(B 000 010 010) = B 111 101 101

2、stdio.h 为输入输出的函数库

3、unistd.h为Linux/Unix系统中内置头文件,包含了许多系统服务的函数原型,例如read函数、write函数和getpid函数等。用man read 可以显示

其作用相当于windows操作系统的"windows.h",是操作系统为用户提供的统一API接口,方便调用系统提供的一些服务。

4、#include <fcntl.h>:访问权限、创建文件模式、非阻塞标记

5、umask 码存在,最终权限为创建权限减去umask 码的值。例如,创建777权限的文件,umask 为0022,创建的最终权限为555,umask 码中的0 为粘着位,作用是进程结束了文件还存在在内存中

6、使用diff 命令可以比较两个文件内容的差异,无差异则不返回。

//author:zengzhi#include <stdio.h>#include <unistd.h>#include <fcntl.h>int main(int argc,char *argv[]){int fd;fd=open("./a.c",O_APPEND|O_RDWR);if(fd<0){printf("cread a.c file fail\n");return -1;}printf("cread a.c file suceess,fd=%d\n",fd);close(fd);return 0;}

更换flag 尝试:

检验文件是否存在:文件存在时,创建失败并返回负值

使用man 2 open 查看头文件:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。