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 查看头文件:
Linux 系统编程-文件IO-文件描述符、open函数的使用、实现touch命令相关推荐
- linux系统编程学习_(2)进程控制-- fork函数、exec函数族、回收子进程--孤儿进程僵尸进程、wait函数
linux系统编程学习_(2)进程控制-- fork函数.exec函数族.回收子进程–孤儿进程僵尸进程.wait函数 进程控制 fork()函数 创建一个子进程. pid_t fork(void); ...
- linux原子过程,linux系统编程:IO读写过程的原子性操作实验
所谓原子性操作指的是:内核保证某系统调用中的所有步骤(操作)作为独立操作而一次性加以执行,其间不会被其他进程或线程所中断. 举个通俗点的例子:你和女朋友OOXX的时候,突然来了个电话,势必会打断你们高 ...
- 【Linux系统编程学习】 文件描述符
此为牛客网Linux C++课程1.19课程笔记. 1. 文件描述符表 如图,我们知道每个进程都有其虚拟地址空间(0~4G),其中3 ~ 4G部分为内核区.进程的进程控制块保存就在内核区,而PCB中维 ...
- linux下编写打印文件的函数,Linux系统编程笔记-文件IO
本文主要介绍了如下内容: C标准库函数与系统函数的关系 进程控制块 文件描述符 系统调用:open.close.read.write.lseek.fcntl和ioctl 先导概念 C标准库函数与系统函 ...
- 【Linux系统编程】IO多路复用之epoll
00. 目录 文章目录 00. 目录 01. 概述 02. epoll函数 03. 程序示例 04. epoll优缺点 05. 附录 01. 概述 epoll是Linux下多路复用IO接口select ...
- 【Linux系统编程】IO多路复用之select
00. 目录 文章目录 00. 目录 01. 概述 02. select函数 03. select程序示例 04. select优缺点 05. 附录 01. 概述 I/O 多路复用技术是为了解决进程或 ...
- 【Linux系统编程】IO标准缓冲区
00. 目录 文章目录 00. 目录 01. 缓冲区概述 02. 全缓冲 03. 行缓冲 04. 不带缓冲区 05. 附录 01. 缓冲区概述 标准I/O提供了三种类型的缓冲: 1.全缓冲: 在填满标 ...
- 【Linux系统编程】IO多路复用之poll
00. 目录 文章目录 00. 目录 01. 概述 02. poll函数 03. 程序示例 04. poll优缺点 05. 附录 01. 概述 select() 和 poll() 系统调用的本质一样, ...
- linux系统编程:IO读写过程的原子性操作实验
所谓原子性操作指的是:内核保证某系统调用中的所有步骤(操作)作为独立操作而一次性加以执行,其间不会被其他进程或线程所中断. 举个通俗点的例子:你和女朋友OOXX的时候,突然来了个电话,势必会打断你们高 ...
- 【Linux】一步一步学Linux系统编程教程汇总(暂时暂停更新......)
00. 目录 文章目录 00. 目录 01. 概述和标准 02. 文件操作 03. 进程概念 04. 进程间通信 05. 多线程 06. 信号 07. 同步与互斥 08. 高级IO 09. 其它 10 ...
最新文章
- 帆软报表调用mysql存储过程_FineReport单行与数据库交互的方法
- 16个经典面试问题回答思路[求职者必看]
- java 对象初始化_Java对象初始化
- VS2017安装openGL
- angularjs指令(一)
- 智能语音升级用户体验,标贝以创新优势布局儿童有声内容市场
- wooden sticks
- html快闪软件制作,阿勇pr:如何使用pr快闪模板快速制作出快闪视频
- pr视频两边模糊_干货!Pr教程:如何在视频中添加模糊效果?
- 什么是MySQL集群?带你全面掌握MySQL集群原理
- uniapp里面怎么打开第三方应用
- 去年净亏7.37亿美元,“自动驾驶第一股”的商业化之痛
- 串行异步通信_什么是并行传输、串行传输、异步传输?
- 提升思维品质,不可不知的5个工具
- 【Leetcode】精选算法top200道(二)
- linux下shell命令之hwclock
- 谷歌浏览器F12抓包如何过滤只显示接口请求不显示图片、js那些请求
- IPv6技术精要--第17章双栈和隧道
- 变量four赋值数字python_第2节:初识python
- TP6----------阿里云短信包验证码登录
热门文章
- ZZULIOJ 1035: 分段函数求值 (Java)
- 使用wireshark进行安卓抓包分析
- OAuth2四种不同的标准模式
- Photoshop抠图(磁性套索工具及几个常用案例)
- DDOS攻击器常见的三种方式
- juniper防火墙配置
- 【那些年我们一起看过的论文】之《Handwritten Digit Recognition with a Back-Propagation Network》
- 网站服务器在本地是指,本地域名是什么意思?本地域名服务器在哪?
- Unity发布抖音小游戏:申请注册(包括主体认证和基础信息完善)
- 网络爬虫法即将出台!!!小爬怡情,大爬over