linux系统编程:open常用参数详解
open用于打开一个文件,通过设置不同的flag,可以让进程只读,只写,可读/可写等操作
一、对一个不存在或者存在的文件(test.txt),进行写入操作
/*================================================================
* Copyright (C) 2018 . All rights reserved.
*
* 文件名称:cp.c
* 创 建 者:ghostwu(吴华)
* 创建日期:2018年01月10日
* 描 述:用open和write实现cp命令
*
================================================================*/ #include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h> int main(int argc, char *argv[])
{
int fd, openflags; //openflags = O_WRONLY | O_CREAT; openflags = O_WRONLY; fd = open( "test.txt" , openflags );
if( fd < ) {
printf( "%d\n", errno );
perror( "write to file" );
}
return ;
}
1)当test.txt不存在时, 文件打开失败,会把操作系统的全局变量errno设置一个错误号, 这里设置的是2,对于一个2,我们完全不知道是什么错误,所以调用perror函数,他会把编号2解释成可读性的错误信息,
那么这里被解读成"No such file or directory",可以通过"grep "No such file or directory" /usr/include/*/*.h" 找到errno为2对应的头文件
2)如果test.txt文件存在,不会报错,打开一个正常的文件描述符,文件原来的内容不会受影响
二、加入O_CREAT标志
/*================================================================
* Copyright (C) 2018 . All rights reserved.
*
* 文件名称:cp.c
* 创 建 者:ghostwu(吴华)
* 创建日期:2018年01月10日
* 描 述:用open和write实现cp命令
*
================================================================*/ #include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h> int main(int argc, char *argv[])
{
int fd, openflags; //openflags = O_WRONLY | O_CREAT; openflags = O_WRONLY | O_CREAT; fd = open( "test.txt" , openflags );
printf( "fd = %d\n", fd );
if( fd < ) {
printf( "%d\n", errno );
perror( "write to file" );
}
return ;
}
1)如果test.txt不存在,那就创建test.txt,不会报错
2)如果test.txt存在,test.txt原内容不会受到影响
三、加入O_TRUNC标志
openflags = O_WRONLY | O_CREAT | O_TRUNC;
1)如果test.txt不存在,那就创建test.txt,不会报错
2)如果test.txt存在,test.txt原内容会被清空
四、权限位
/*================================================================
* Copyright (C) 2018 . All rights reserved.
*
* 文件名称:cp.c
* 创 建 者:ghostwu(吴华)
* 创建日期:2018年01月10日
* 描 述:用open和write实现cp命令
*
================================================================*/ #include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h> int main(int argc, char *argv[])
{
int fd, openflags;
mode_t fileperms; openflags = O_WRONLY | O_CREAT | O_TRUNC; //rwxrw-r-x
fileperms = S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IXOTH; fd = open( "test.txt" , openflags, fileperms );
printf( "fd = %d\n", fd );
if( fd < ) {
printf( "%d\n", errno );
perror( "write to file" );
}
return ;
}
五、O_APPEND追加
linux系统编程:open常用参数详解的更多相关文章
- linux系统编程:守护进程详解及创建,daemon()使用
一,守护进程概述 Linux Daemon(守护进程)是运行在后台的一种特殊进程.它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.它不需要用户输入就能运行而且提供某种服务,不是对整个 ...
- linux系统运维常用基本命令详解
1.ls 文件属性: -:普通文件 d:目录文件 b:块设备 c:字符设备文件 l:符号连接文件 p:命令管道 s:套接字文件 文件权限: 9位数字,每3位一组 文件硬链接次数 ...
- linux系统下top命令参数详解
简介 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器. top显示系统当前的进程和其他状况,是一个动态显示过程,即可以通过用户按 ...
- 【转】Linux系统编程---dup和dup2详解
正常的文件描述符: 在linux下,通过open打开以文件后,会返回一个文件描述符,文件描述符会指向一个文件表,文件表中的节点指针会指向节点表.看下图: 打开文件的内核数据结构 dup和dup2两个函 ...
- Linux Shell编程与编辑器使用详解
<Linux Shell编程与编辑器使用详解> 基本信息 作者: 刘丽霞 杨宇 出版社:电子工业出版社 ISBN:9787121207174 上架时间:2013-7-22 出版日期:201 ...
- find常用参数详解
find常用参数详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在linux系统中,在init 3模式情况下都是命令行模式,这个时候我们想要找到一个文件的就得依赖一个非常好用的 ...
- free命令常用参数详解
free命令常用参数详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在运维期间我们会经常去查看服务器硬件信息,比如说内存,大家可能知道看内存用“[root@yinzhengji ...
- tcpdump常用参数详解
tcpdump常用参数详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 好久没有更新我的博客了,看来自己最近还没有在放假中回过神来啊,哈哈~是不是也有小伙伴跟我一样呢?回归正题, ...
- chattr的常用参数详解
chattr的常用参数详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在实际生产环境中,有的运维工程师不得不和开发和测试打交道,在我们公司最常见的就是部署接口.每天每个人部署的 ...
- cat常用参数详解
cat常用参数详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 最近,我的一个朋友对linux特别感兴趣,于是我觉得每天交给他一个命令的使用,这样一个月下来也会使用30个命令,基 ...
随机推荐
- iOS-项目开发1-Block
Block回顾 Block分为NSStackBlock, NSMallocBlock, NSGloblaBlock.即栈区Block,堆区Block,全局Block.在ARC常见的是堆块. 在ARC中 ...
- 修改oracle默认监听端口
修改oracle默认监听端口 oracle端口修改 主要是修改两个文件和修改oracle参数local_listener 1 查看当前监听状态 [oracle@test ~]$ lsnrctl sta ...
- Angular使用总结 --- 搜索场景中使用rxjs的操作符
在有input输入框的搜索/过滤业务中,总会考虑如何减少发起请求频率,尽量使每次的请求都是有效的.节流和防抖是比较常见的做法,这类函数的实现方式也不难,不过终归还是需要自己封装.rxjs提供了各种操作 ...
- Dell R730服务器 Raid5配置
Dell R730服务器,有7块5t硬盘,默认做的RAID5.我们的目的是取其中6块硬盘做RAID5,留一块硬盘做热备. 一块SSD系统盘. 在这里,我具体解释一下 ①6块硬盘做成RAID5 ②6块硬 ...
- odoo开发笔记 -- 模型一对多tree视图弹窗效果实现
实现效果参考: 1. 开发者模式 -- 设置 -- 工作流 -- 编辑 -- 添加项目 2. 会计模块 -- 管理 -- 付款条款 -- 编辑/创建 实现方式,很简单.只要视图界面写个一对多关联字段就 ...
- CentOS7.x编译安装nginx,实现HTTP2
网站使用HTTP2有助于网站加速及更安全,要配置HTTP2必须满足两个条件:①openssl的版本必须在1.0.2e及以上.②nginx的版本必须在1.9.5以上 一.准备工作 配置HTTP2之前需 ...
- 课程二(Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization),第一周(Practical aspects of Deep Learning) —— 4.Programming assignments:Gradient Checking
Gradient Checking Welcome to this week's third programming assignment! You will be implementing grad ...
- 快速选择算法/Select 寻找第k大的数
参考算法导论9.3节的内容和这位大神的博客:http://blog.csdn.net/v_JULY_v上对这一节内容代码的实现进行了学习 尝试实现了以查找中位数为前提的select算法. 算法功能:可 ...
- 详解C#泛型(一)
一.C#中的泛型引入了类型参数的概念,类似于C++中的模板,类型参数可以使类型或方法中的一个或多个类型的指定推迟到实例化或调用时,使用泛型可以更大程度的重用代码.保护类型安全性并提高性能:可以创建自定 ...
- 【IT笔试面试题整理】丑数
[试题描述]我们把只包含因子2.3和5的数称作丑数.求按从到大的顺序的第1500个丑数.例如6,8是丑数,而14不是,因为它包含因子7.习惯上把1当作第一个丑数. 根据丑数的定义,丑数应该是另一个丑数 ...