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提供了对应的函数。
打开文件:
/*
参数: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多进程/多线程编程
祝各位道友早日神功大成!
恭喜你点亮了新的技能树,目前的你眼前有两个选择,到底走那边呢?(其实走哪都是一样的,我说了算,哈哈!)