当前位置: 首页 > news >正文

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多进程/多线程编程
祝各位道友早日神功大成!

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

相关文章:

  • HTML5/JS/Vue与Java后端技术类比(AI创作)
  • SpringBoot对接火山引擎大模型api实现图片识别与分析
  • 深入理解Liunx文件系统与日志分析
  • 尚硅谷2019版Java网络编程笔记
  • HBase客户端metacache缓存过期报错
  • Mybatis 中 mappers标签 package的使用
  • 一种基于学习的多尺度方法及其在非弹性碰撞问题中的应用·
  • 【Linux】VLAN配置命令
  • 【数据结构_6上篇】有关链表的oj题
  • 【含文档+PPT+源码】蛋糕商城预定App的设计与实现
  • HTML5新特性
  • 在springboot项目中调用第三方天气api服务
  • js中 剩余运算符(Rest Operator )(...)和展开运算符(Spread Operator)(...)的区别及用法
  • 基于open3d的一些常见点云操作
  • 【数据结构_4】顺序表
  • Adobe After Effects的插件--------Optical Flares之面板属性
  • KWDB创作者计划—KWDB场景创新:多模态数据融合与边缘智能的产业实践
  • 中厂算法岗面试总结
  • 【SLAM】在ORB_SLAM2的ROS模式下使用RealSense D435相机
  • R语言——直方图
  • 家政阿姨如何炼成全国劳模?做饭、收纳、养老、外语样样都会
  • 乌方公布矿产协议详情:未提债务义务,包含美再援助条款
  • 当农民跨进流动的世界|劳动者的书信①
  • 上海科创再出发:“造星”的城和“摘星”的人
  • 特朗普加征关税冲击波:美国零售、汽车、航空、科技企业纷纷预警业绩波动
  • 中国武术协会原主席张耀庭逝世,曾促成电影《少林寺》拍摄