linux多线(进)程编程——(1)前置知识

liunx多线程编程(前置知识)前置知识

前言

学习编程就像是修仙,分为宗门的正统修士(计算机专业的学生),以及野修(半路转码)。正统修士有各大宗门的功法,保证一路修行畅通无阻。而对于野修,少部分人可以得到失落的传承(学习路线),大部分的野修都走了歪路子,对着网站的的某些某某语言基础教学视频学习了大半年,最后根基不稳,在与人斗法(面试找工作)的过程中凄惨落败。
仅仅学习了语言的修士相当于练气境界,相当于低阶修士,而对于这些练气圆满的修士来说下一步该怎么做至关重要。数据结构是一种路线,修炼出来必成一方大能,但是那条路线过于凶险,对天资有这极大的要求。今天我们要走了是一条风险较小但也能帮助各位问鼎修真界的一条路线,即《linux操作系统》。

当前境界

(为什么要学习linux?因为学习Linux可以帮助我们更好地理解操作系统的工作原理,提高系统的运行效率和安全性。)

Linux,一般指GNU/Linux(单独的Linux内核并不可直接使用,一般搭配GNU套件,故得此称呼),是一种免费使用和自由传播的类UNIX操作系统,其内核由林纳斯·本纳第克特·托瓦兹(Linus Benedict Torvalds)于1991年10月5日首次发布,它主要受到Minix和Unix思想的启发,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。它支持32位和64位硬件,能运行主要的Unix工具软件、应用程序和网络协议。
linux操作系统

文件

首先我要向各位道友介绍本条路线的核心心法口诀:“万物皆文件”。
(暂时编不下去了,说干货)
linux中文件是一个非常重要的概念,电脑相当于我们的躯体,而我们的每一寸血肉都可以称为文件。在电脑上,各种外设类似于硬盘,鼠标,键盘等,都可以是文件。这个概念还有一点抽象,大家先记住,随着修为的加深,我们就会理解这个概念的。

想一想我们能对一份文件干什么?无非是下面几个动作,打开文件,关闭文件,读文件,写文件。对于这四个操作,linux提供了对应的函数。

打开文件:

/*
参数:pathname: 文件路径,不必多说flags:打开方式 O_RDONLY:只读模式O_WRONLY:只写模式O_RDWR:可读可写。。。(其他的先不管了)mode:只有flags是一个特定值时这个参数才有意义,先不管了
返回值:fd:int类型,值为-1时表示打开失败值为大于0的数时表示文件的描述符
*/
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode)

这里的返回值 fd 叫做文件描述符,想一下,我打开文件后如何表示这个文件呢?文件描述符就代表了一个身份证的作用,表示了这个文件的身份,之后我们直接使用这个描述符就可以操作这个文件。这种用一个数字代表一个结构的用法在linux中十分常见,大家要习惯。
可以有多个文件描述符指向同一个文件,这些描述符可以带有不同的权限,对同一个文件实现不同的操作。例如通过描述符fd1只能从文件中读取数据,而描述符fd2可以向文件末尾追加数据。

关闭文件:

/*
参数:fd:文件描述符
返回值:值为-1表示关闭失败值为0表示关闭成功
*/
int close(int fd);

这里就用到了文件描述符,我要关闭刚刚打开的文件,就用文件描述符代表这个文件就行。

向文件中写入(重点):

/*
参数:fd:文件描述符buf:缓冲区,存放了你要写入的内容count:要写入的字节数(size_t就是unsigned int)
返回值:表示成功写入的字节数值为-1时表示写入失败(ssize_t就是int,因为要用-1表示写入失败)
*/
ssize_t write(int fd, const void *buf, size_t count);

从文件中读取(重点):

/*
参数:fd:文件描述符buf:缓冲区,存放读取到的内容count:要读取的字节数(size_t就是unsigned int)
返回值:表示成功读取到的字节数
*/
ssize_t read(int fd, void *buf, size_t count);

小结

在这里我先不给大家上实际案例,后面会给大家用更加具体的方式进行演示。
本节我们要:
1、文件描述符的概念(不要与文件标识符混淆)
2、认识这四个函数( 先不要求会用,重点记住read()和write() )

下一集:linux多线(进)程编程——(2)身外化身fork()

结束语

下一节我们将正式进入linux多进程/多线程编程
祝各位道友早日神功大成!

在这里插入图片描述
恭喜你点亮了新的技能树,目前的你眼前有两个选择,到底走那边呢?(其实走哪都是一样的,我说了算,哈哈!)

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

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

相关文章

Npfs!NpFsdCreate函数分析之从NpCreateClientEnd函数分析到Npfs!NpSetConnectedPipeState

第一部分: 1: kd> g Breakpoint 5 hit Npfs!NpFsdCreate: baaecba6 55 push ebp 1: kd> kc # 00 Npfs!NpFsdCreate 01 nt!IofCallDriver 02 nt!IopParseDevice 03 nt!ObpLookupObjectName 04 nt!ObOpenObjectByName 05 nt!IopCreateFile 06…

【软件测试】bug 篇

本章思维导图: 1. 软件测试的生命周期 软件测试贯穿于整个软件的生命周期 流程阶段需求分析测试计划测试设计/开发测试执行测试评估上线运行维护具体工作内容1. 阅读需求文档 2. 标记可测试需求 3. 确定测试类型1. 制定测试范围 2. 选择测试工具 3. 分配资源1. 编写…

「Unity3D」图片导入选项取消Read/Write,就无法正确显示导入大小,以及Addressable打包无法正确显示的问题

如果在Edit -> Project Settings -> Editor中的“Load texture data on demand”勾选,就会让图片导入设置中,不勾选Read/Write,就无法正确显示纹理的大小数字。 更进一步的问题是,使用Addressable打包的时候, 如…

《MySQL从入门到精通》

文章目录 《MySQL从入门到精通》1. 基础-SQL通用语法及分类2. 基础-SQL-DDL-数据库操作3. 基础-SQL-DDL-表操作-创建&查询4. 基础-SQL-DDL-数据类型及案例4.1 数值类型4.2 字符串类型4.3 时间和日期类型 5. 基础-SQL-DDL-表操作-修改&删除5.1 DDL-表操作-修改5.2 DDL-表…

Vccaux_IO在DDR3接口中的作用

一、Vccaux_IO在DDR3接口中的作用 1.vccaux_io通常为FPGA的IO bank的辅助电源,用于支持特定电压的IO标准 2.在DDR3接口中,FPGA的IO bank需要DDR3芯片的电压(1.5v/1.35v)匹配 3.Vccaux_IO用于为FPGA的DDR3接口I/O Bank供电,其电压值、噪声和稳…

深入理解Apache Kafka

引言 在现代分布式系统架构中,中间件扮演着至关重要的角色,它作为系统各组件之间的桥梁,负责处理数据传递、消息通信、负载均衡等关键任务。在众多中间件解决方案中,Apache Kafka凭借其高吞吐量、低延迟和可扩展性,已…

【NLP】 21. Transformer整体流程概述 Encoder 与 Decoder架构对比

1. Transformer 整体流程概述 Transformer 模型的整个处理流程可以概括为从自注意力(Self-Attention)到多头注意力,再加上残差连接、层归一化、堆叠多层的结构。其核心思想是利用注意力机制对输入进行并行计算,从而避免传统 RNN …

路由器端口映射的意思、使用场景、及内网ip让公网访问常见问题和解决方法

一、端口映射是什么意思 端口映射是将内网主机的IP地址端口映射到公网中,内部机器提供相应的互联网服务。当异地用户访问该这个端口时,会自动将请求映射到对应局域网内部的机器上。 二、端口映射常见使用场景 1,远程访问需求。当有…

GEO全域优化白皮书:盈达科技如何打造AI生态中的认知护城河

副标题:让内容被AI优先引用,占领生成式引擎的“主屏入口” 一、GEO:生成式引擎时代的内容占位权之战 随着ChatGPT、Kimi、DeepSeek等生成式AI快速成为信息获取的主流方式,搜索逻辑正在根本性改变:从“网页排名”转向“…

如何用DeepSeek大模型提升MySQL DBA工作效率?实战案例解析

如何用DeepSeek大模型提升MySQL DBA工作效率?实战案例解析 MySQL DBA(数据库管理员)的工作涉及数据库监控、SQL优化、故障排查、备份恢复等复杂任务,传统方式依赖手动操作和经验判断,效率较低。而DeepSeek大模型可以结…

系统设计思维的讨论

我们经常说自己熟悉了spring,能够搭建起一个项目基本框架,并且在此之上进行开发,用户or客户提出需求碰到不会的百度找找就可以实现。干个四五年下一份工作就去面试架构师了,运气好一些可能在中小公司真的找到一份架构师、技术负责…

项目部署-(二)Linux下SpringBoot项目自动部署

一、项目部署架构 二、项目部署环境 192.168.138.100(服务器A): -Nginx :部署前端项目、配置反向代理 -MySQL:主从复制结构中的主库 192.168.138.101(服务器B): -JDK:运行Java项目 -Git:版本控制工具 -Maven:项目构建…

【LeetCode 热题 100】哈希 系列

📁1. 两数之和 本题就是将通过两层遍历优化而成的,为什么需要两层遍历,因为遍历 i 位置时,不知道i-1之前的元素是多少,如果我们知道了,就可以通过两数相加和target比较即可。 因为本题要求返回下标&#xf…

【Kubernetes基础】--查阅笔记1

目录 Kubernetes 是什么为什么要用 KubernetesKubernetes 概念MasterNodePodLabelReplication ControllerDeploymentHorizontal Pod AutoscalerStatefulSetService服务发现机制 JobVolumePersistent VolumeNamespaceConfigmap Kubernetes 是什么 Kubernetes是一个开放的开发平…

卷积神经网络CNN到底在卷些什么?

来源: 卷积神经网络(CNN)到底卷了啥?8分钟带你快速了解!_哔哩哔哩_bilibili卷积神经网络(CNN)到底卷了啥?8分钟带你快速了解!共计2条视频,包括:卷…

Axios 的 POST 请求:QS 处理数据的奥秘与使用场景解析

在现代前端开发中,Axios 已经成为了进行 HTTP 请求的首选库之一,它的简洁易用和强大功能深受开发者喜爱。当使用 Axios 进行 POST 请求时,我们常常会遇到一个问题:是否需要使用 QS 库来处理请求数据?什么时候又可以不用…

java面试题带答案2025最新整理

文章目录 一、java面试题集合框架1. 请简要介绍 Java 集合框架的体系结构2. ArrayList 和 LinkedList 的区别是什么3. HashMap 的工作原理是什么,它在 JDK 7 和 JDK 8 中有哪些不同4. 如何解决 HashMap 的线程安全问题5. TreeSet 是如何保证元素有序的 二、java面试…

4.B-树

一、常见的查找方式 顺序查找 O(N) 二分查找 O(logN)(要求有序和随机访问) 二叉搜索树 O(N) 平衡二叉搜索树(AVL树和红黑树) O(logN) 哈希 O(1) 考虑效率和要求而言,正常选用 平衡二叉搜索树 和 哈希 作为查找方式。 但这两种结构适合用于…

CTF--shell

一、原题 (1)提示: $poc"a#s#s#e#r#t";$poc_1explode("#",$poc);$poc_2$poc_1[0].$poc_1[1].$poc_1[2].$poc_1[3].$poc_1[4].$poc_1[5]; $poc_2($_GET[s]) (2)原网页:一片空白什么都…

基于51单片机的正负5V数字电压表( proteus仿真+程序+设计报告+讲解视频)

基于51单片机的正负5V数字电压表( proteus仿真程序设计报告讲解视频) 仿真图proteus7.8及以上 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0101 1. 主要功能: 设计一个基于51单片机数字电压表 1、能够…