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 查看头文件:
在这里插入图片描述在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值