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 查看头文件:

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

  1. linux系统编程学习_(2)进程控制-- fork函数、exec函数族、回收子进程--孤儿进程僵尸进程、wait函数

    linux系统编程学习_(2)进程控制-- fork函数.exec函数族.回收子进程–孤儿进程僵尸进程.wait函数 进程控制 fork()函数 创建一个子进程. pid_t fork(void); ...

  2. linux原子过程,linux系统编程:IO读写过程的原子性操作实验

    所谓原子性操作指的是:内核保证某系统调用中的所有步骤(操作)作为独立操作而一次性加以执行,其间不会被其他进程或线程所中断. 举个通俗点的例子:你和女朋友OOXX的时候,突然来了个电话,势必会打断你们高 ...

  3. 【Linux系统编程学习】 文件描述符

    此为牛客网Linux C++课程1.19课程笔记. 1. 文件描述符表 如图,我们知道每个进程都有其虚拟地址空间(0~4G),其中3 ~ 4G部分为内核区.进程的进程控制块保存就在内核区,而PCB中维 ...

  4. linux下编写打印文件的函数,Linux系统编程笔记-文件IO

    本文主要介绍了如下内容: C标准库函数与系统函数的关系 进程控制块 文件描述符 系统调用:open.close.read.write.lseek.fcntl和ioctl 先导概念 C标准库函数与系统函 ...

  5. 【Linux系统编程】IO多路复用之epoll

    00. 目录 文章目录 00. 目录 01. 概述 02. epoll函数 03. 程序示例 04. epoll优缺点 05. 附录 01. 概述 epoll是Linux下多路复用IO接口select ...

  6. 【Linux系统编程】IO多路复用之select

    00. 目录 文章目录 00. 目录 01. 概述 02. select函数 03. select程序示例 04. select优缺点 05. 附录 01. 概述 I/O 多路复用技术是为了解决进程或 ...

  7. 【Linux系统编程】IO标准缓冲区

    00. 目录 文章目录 00. 目录 01. 缓冲区概述 02. 全缓冲 03. 行缓冲 04. 不带缓冲区 05. 附录 01. 缓冲区概述 标准I/O提供了三种类型的缓冲: 1.全缓冲: 在填满标 ...

  8. 【Linux系统编程】IO多路复用之poll

    00. 目录 文章目录 00. 目录 01. 概述 02. poll函数 03. 程序示例 04. poll优缺点 05. 附录 01. 概述 select() 和 poll() 系统调用的本质一样, ...

  9. linux系统编程:IO读写过程的原子性操作实验

    所谓原子性操作指的是:内核保证某系统调用中的所有步骤(操作)作为独立操作而一次性加以执行,其间不会被其他进程或线程所中断. 举个通俗点的例子:你和女朋友OOXX的时候,突然来了个电话,势必会打断你们高 ...

  10. 【Linux】一步一步学Linux系统编程教程汇总(暂时暂停更新......)

    00. 目录 文章目录 00. 目录 01. 概述和标准 02. 文件操作 03. 进程概念 04. 进程间通信 05. 多线程 06. 信号 07. 同步与互斥 08. 高级IO 09. 其它 10 ...

最新文章

  1. 帆软报表调用mysql存储过程_FineReport单行与数据库交互的方法
  2. 16个经典面试问题回答思路[求职者必看]
  3. java 对象初始化_Java对象初始化
  4. VS2017安装openGL
  5. angularjs指令(一)
  6. 智能语音升级用户体验,标贝以创新优势布局儿童有声内容市场
  7. wooden sticks
  8. html快闪软件制作,阿勇pr:如何使用pr快闪模板快速制作出快闪视频
  9. pr视频两边模糊_干货!Pr教程:如何在视频中添加模糊效果?
  10. 什么是MySQL集群?带你全面掌握MySQL集群原理
  11. uniapp里面怎么打开第三方应用
  12. 去年净亏7.37亿美元,“自动驾驶第一股”的商业化之痛
  13. 串行异步通信_什么是并行传输、串行传输、异步传输?
  14. 提升思维品质,不可不知的5个工具
  15. 【Leetcode】精选算法top200道(二)
  16. linux下shell命令之hwclock
  17. 谷歌浏览器F12抓包如何过滤只显示接口请求不显示图片、js那些请求
  18. IPv6技术精要--第17章双栈和隧道
  19. 变量four赋值数字python_第2节:初识python
  20. TP6----------阿里云短信包验证码登录

热门文章

  1. ZZULIOJ 1035: 分段函数求值 (Java)
  2. 使用wireshark进行安卓抓包分析
  3. OAuth2四种不同的标准模式
  4. Photoshop抠图(磁性套索工具及几个常用案例)
  5. DDOS攻击器常见的三种方式
  6. juniper防火墙配置
  7. 【那些年我们一起看过的论文】之《Handwritten Digit Recognition with a Back-Propagation Network》
  8. 网站服务器在本地是指,本地域名是什么意思?本地域名服务器在哪?
  9. Unity发布抖音小游戏:申请注册(包括主体认证和基础信息完善)
  10. 网络爬虫法即将出台!!!小爬怡情,大爬over