129 Linux 系统编程8 IO操作 系统函数 open

系统调用

什么是系统调用:

由操作系统实现并提供给外部应用程序的编程接口。(Application Programming Interface,API)。是应用程序同系统之间数据交互的桥梁。

C标准函数和系统函数调用关系。一个helloworld如何打印到屏幕。

回忆我们前面学过的C标准库文件IO函数。

fopen、fclose、fseek、fgets、fputs、fread、fwrite......

r 只读、 r+读写

w只写并截断为0、 w+读写并截断为0

a追加只写、 a+追加读写

系统函数

        open 函数

#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t mode);

函数原型

int open(const char *pathname, int flags);

int open(const char *pathname, int flags, mode_t mode);

int close(int fd);

常用参数

O_RDONLY、O_WRONLY、O_RDWR   

O_APPEND、 在文件末尾追加

O_CREAT、   创建文件

O_EXCL、  

 O_TRUNC、 清空

O_NONBLOCK     

创建文件时,指定文件访问权限。权限同时受umask影响。结论为:

文件权限 = mode & ~umask

使用头文件:<fcntl.h> 

open常见错误 :

1. 打开文件不存在

2. 以写方式打开只读文件(打开文件没有对应权限)

3. 以只写方式打开目录

返回值

返回一个 fd,是无符号整型,代表的是 文件描述符

如果有error,则返回-1

如果成功,返回对应该文件的fd,

正常 fd 是3开始的,因为0,1,2 被占用了。

文件描述符存在于 PCB 进程控制块中。PCB 进程控制块存在于

举例

#include <cstdio>
#include <unistd.h>
#include <fcntl.h>
#include <iostream>
#include <errno.h>
#include <string.h>
using namespace std;int main()
{int fd;//fd = open("/home/hunandede/projects/linuxcpp/dict.txt",O_RDONLY);fd = open("./c.txt", O_RDONLY);//打开当前可执行程序 同一级 目录下的 a.txt文件if (fd==-1) {cout << "can not find dict.txt fd = " << fd << "  errno = " << errno << "  strerror(errno) = " << strerror(errno) << endl;strerror(errno);}int fd2;fd2 = open("./b.txt", O_CREAT | O_RDWR, 0664);cout << "fd2 = " << fd2 << endl;if (fd2<0) {cout << "crate b.txt fail fd2 = " << fd2 << "  errno = " << errno << endl;}printf("hello from linuxcpp!\n");return 0;
}

我们从open 函数引出的 文件描述符:的概念

PCB进程控制块  (进而引出的的概念)

read/write 函数

函数原型:

ssize_t read(int fd, void *buf, size_t count);

参数:

fd:文件描述符,从那个文件里面读取

buf:读到的数据放到哪里

count:缓冲区大小,(也就是说,读多少字节的数据)

ssize_t write(int fd, const void *buf, size_t count);

fd:文件描述符,给那个文件里面写

buf:将哪里的数据写入fd

count:将哪里的数据写入多少到fd

read与write函数原型类似。使用时需注意:read/write函数的第三个参数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/487774.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 yarn 的时候,遇到 Error [ERR_REQUIRE_ESM]: require() of ES Module 怎么解决?

晚上回到家&#xff0c;我打开自己的项目&#xff0c;执行&#xff1a; cd HexoPress git pull --rebase yarn install yarn dev拉取在公司 push 的代码&#xff0c;然后更新依赖&#xff0c;最后开始今晚的开发时候&#xff0c;意外发生了&#xff0c;竟然报错了&#xff0c;…

基于qt的图书管理系统----03核心界面设计

参考b站&#xff1a;视频连接 源码github&#xff1a;github 目录 1 添加软件图标2 打包程序3 三个管理界面设计4 代码编写4.1 加载界面4.2 点击按钮切换界面4.3 组团添加样式4.4 搭建表头4.5 表格相关操作 从别人那里下载的项目会有这个文件&#xff0c;里边是别人配置的路径…

基于Java SSM框架实现艺诚美业管理系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现艺诚美业管理系统演示 摘要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&a…

制造执行系统(MOM):生产过程大屏联动、一目了然。

大家好&#xff0c;我是大美B端工场&#xff0c;本期继续分享常见的制作执行系统&#xff0c;欢迎大家关注&#xff0c;如有B端写系统界面的设计和前端需求&#xff0c;可以联络我们。 一、什么是MOM MOM系统是制造执行系统&#xff08;Manufacturing Operations Management S…

IDEA Debug框的 show execution point按钮没了

在这里右键&#xff1a; Add Action&#xff1a; 搜索添加&#xff1a; 本文由博客一文多发平台 OpenWrite 发布&#xff01;

go 1.18 不同目录package引用问题

go 1.18开始使用module了 不同的package在vs code中引用的话 需要先开启 是Go1.11版本之后 推出的版本管理工具 有点类似java的 maven工具 可以引入依赖使用 go env -w GO111MODULEon 先把这个打开 然后在创建的vs code工作目录下 执行 module gomdoule module 模块名 会生…

Linux——简单的Shell程序

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、Shell程序思路二、Shell代码展示 一、Shell程序思路 用下图的时间轴来表示事件的发生次序…

Moment.js——轻松处理日期和和时间,有实例代码

hello&#xff0c;我是贝格前端工场&#xff0c;本期给大家带来便捷的处理日期和时间的js库&#xff1a;Moment.js&#xff0c;用这个类库处理时间将会十分方便&#xff0c;欢迎老铁们点赞关注&#xff0c;如有前端定制开发需求可以私信我们。 一、Moment.js的简介和功能 Mom…

IntelliJ IDEA 创建Spring Boot 项目整合jdbc详细步骤

IntelliJ IDEA 创建Spring Boot 项目&整合jdbc详细步骤 1、打开 IntelliJ IDEA 软件2、使用 "Spring Initializr" 作为项目类型&#xff0c;新建项目工程3、选择对应的SpringBoot版本和依赖4、Spring Boot 项目的结构5、创建一个TestController&#xff0c;并运行…

Javascript数字精度丢失的问题

一、问题 0.1 0.2 0.3 // false 二、浮点数 “浮点数”是一种表示数字的标准&#xff0c;整数也可以用浮点数的格式来存储 我们也可以理解成&#xff0c;浮点数就是小数 在JavaScript中&#xff0c;现在主流的数值类型是Number&#xff0c;而Number采用的是IEEE754规范中…

石头剪刀布游戏(C语言)

题目描述 石头剪刀布游戏有 3 种出拳形状&#xff1a;石头、剪刀、布。分别用字母 A , B , C 表示。 游戏规则: 出拳形状之间的胜负规则如下&#xff1a; A > B&#xff1b;B > C&#xff1b;C > A&#xff1b;">"左边一个字母&#xff0c;表示相对优…

Nginx网络服务四-----日志、Nginx压缩和ssl

1.自定义访问日志 如果访问出错---404&#xff0c;可以去看error.log日志信息 访问日志是记录客户端即用户的具体请求内容信息&#xff0c;而在全局配置模块中的error_log是记录nginx服务器运行时的日志保存路径和记录日志的level&#xff0c;因此两者是不同的&#xff0c;而且…