linux系统编程下的open函数使用方法
目录
1.句柄(file descriptor 简称fd)
2.使用open前需要先包含头文件
3.参数说明
3.1 参数1(pathname)
3.2 参数2(flags)
3.3 参数3(mode)
4. 用法示例
open函数属于Linux中系统IO,用于“打开”文件,代码打开一个文件意味着获得了这个文件的访问句柄。
int fd = open(参数1,参数2,参数3);int fd = open(const char *pathname,int flags,mode_t mode);
1.句柄(file descriptor 简称fd)
首先每个文件都属于自己的句柄,例如标准输入是0,标准输出是1,标准出错是2。
每打开一个文件就会返回句柄来操作这个文件,一般是从3开始,然后4,5,6一直下去。
close(fd)之后句柄就返回给系统,例如打开一个文件后fd是3,close之后再打开另外一个文件也还是3,但代表的文件不一样了。
2.使用open前需要先包含头文件
#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>
3.参数说明
int fd = open(const char *pathname,int flags,mode_t mode);
3.1 参数1(pathname)
即将要打开的文件路径,例如:“a.txt”当前目录下的a.txt文件
3.2 参数2(flags)
flags分为两类:主类,副类
主类:
O_RDONLY 以只读方式打开
O_WRONLY 以只写方式打开
O_RDWR 以可读可写方式打开
这三种方式是互斥的。
副类:
O_CREAT 如果文件不存在则创建该文件
O_EXCL 如果使用O_CREAT选项且文件存在,则返回错误消息
O_NOCTTY 如果文件为终端,那么终端不可以调用open系统调用的那个进程的控制终端
O_TRUNC 如果文件已经存在则删除文件中原有数据
O_APPEND 以追加的方式打开
主副可以配合使用,例如:O_RDWR|O_CREAT|O_TRUNC
3.3 参数3(mode)
mode:如果文件被新建,指定其权限未mode。
mode是八进制权限码,0777表示文件所有者。该文件用户组,其他用户都有可读可写可执行权限。
4. 用法示例
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>int main()
{int fd;//创建新文件 fd=open("myhello",O_RDWR | O_CREAT,0777);if(fd == -1){perror("open file");exit(1);}printf("fd = %d\n",fd);int ret = close(fd);printf("ret = %d\n",ret);if(ret == -1){perror("close file");exit(1);}
}
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>int main()
{int fd;//创建新文件判断是否存在 fd=open("myhello",O_RDWR | O_CREAT | O_EXCL,0777);if(fd == -1){perror("open file");exit(1);}printf("fd = %d\n",fd);int ret = close(fd);printf("ret = %d\n",ret);if(ret == -1){perror("close file");exit(1);}
}
原文链接:https://blog.csdn.net/weixin_39296438/article/details/79422068
linux系统编程下的open函数使用方法相关推荐
- Linux系统编程 37 -makefile2个函数和clean
Linux系统编程 37 -makefile2个函数和clean 学习笔记 一个makefile 就是用一个个规则凑在一起 2个函数 wildcard patsubst wildcard 百搭牌,通配 ...
- Linux C编程下没有 itoa()函数的问题
用ubuntu linux c编程,发现Linux内核中只有atoi()函数,被包含在stdlib.h头文件中,而没有itoa()函数,网上查了有一个实现了itoa()函数的代码 void itoa ...
- linux系统编程之信号(signal)的使用方法案例
信号处理过程: 中断源->中断屏蔽->保护现场->中断处理程序->中断恢复 信号称为软中断 //kill -l 查看所有signal信号 共计64个信号 //man 7 sig ...
- linux系统编程3—文件存储函数
文章目录 1.innode 2.dentry 3.stat函数 4.lstat函数 5.access函数.chmod函数.truncate函数 6.link函数 7.unlink函数 unlink的特 ...
- Linux系统编程.NO7——目录操作函数
5. 目录文件管理函数 5.1. 目录文件概念 目录在Linux中也是文件,也有对应的文件指针,每次读目录之前也要先打开目录,然后目录指针就出现了,第一次读就是第一个文件的信息,然后第二次读就是第二个 ...
- linux系统编程3-read、lseek函数
//read函数原型:ssize_t read(int fd, void *buf, size_t count); //lseek函数原型:off_t lseek(int fd, off_t offs ...
- Linux系统编程下做一个简易的shell
自主实现一个shell--------minshell shell:命令行解释器-------解释执行用户的输入(完成相对应的功能) 步骤 1. 获取标准输入中的字符串 2. 对字符串进行解析[ls ...
- 嵌入式学习之linux系统编程----1 了解linux编程并且在ubuntu以及ARM上运行测试程序
1.何为linux系统编程? linux系统编程也称为linux下的高级编程,它介于应用层与驱动层之间. 一般来说分为三个层面,分别是:应用层(写一个qt程序或者c程序就属于是应用层面).驱动层(比如 ...
- linux系统发送信号的系统调用是,linux系统编程之信号:信号发送函数sigqueue和信号安装函数sigaction...
信号发送函数sigqueue和信号安装函数sigaction sigaction函数用于改变进程接收到特定信号后的行为. sigqueue()是比较新的发送信号系统调用,主要是针对实时信号提出的(当然 ...
最新文章
- 2022-2028年中国免疫诊断行业市场前瞻与投资战略规划分析报告
- 使用Repeater的Template
- 计算机网络课程复习大纲
- JavaScript 的垃圾回收与内存泄露
- Apache主配置文件httpd.conf 详解
- 程序员面试时这样介绍自己的项目经验,成功率能达到98.99%
- JavaScript:undefined And null差异
- Effective Java之用实例域代替序数(三十一)
- 2021牛客OI赛前集训营-提高组(第五场)D-牛牛的border【SAM】
- 730阵列卡支持多大硬盘_华为1000多手机哪款好?推荐只此一款!华为品牌性价比最高千元机...
- mysql5.6开启memcache_php – 使用MYsql 5.6 Memcache
- 实现option上下移动_JS实现Select的option上下移动的方法
- “离开 360 时,它只给了我一块钱”
- [Windows] 一些简单的CMD命令
- VS2015,C++MFC建立可视化界面第一天
- Maven安装与配置(详细步骤)
- python调用perl_python调用perl脚本
- Tomcat,Servlet,JSP之间是什么关系?
- 第1章 Dev C++的使用
- C++继承问题(白兰花例)