摘要:
上节中已经实现了对普通命令的解析,包括输入重定向,输出重定向,管道,后台作业,这次就来执行已经解析好的命令,对应的函数为:execute_command(),首先对带有管道的命令进行执行:比如:"ls | grep init | wc -w"这条命令,有两条管道,其中最后一条命令是不需要管道的:【说... 阅读全文
摘要:
上节minishell当中,已经初步实现了一个简单命令的解析,这节来继续对更加复杂命令进行解析,包含:输入重定向的解析、管道行的解析、输出重定向的解析以及是否有后台作业的解析,如下:下面对其进行实现,上节中实现了对单条命令的解析,如下:这节因为是多条,所以解析命令的实现也得重新开始写,在写之前,先列... 阅读全文
摘要:
之前已经花了不少篇幅学习了linux系统编程的很多知识点:文件与io、进程、信号、管道,而零散的知识点,怎么能够综合的串接起来是学习的一个很重要的目的,当然最好的方式就是用所学的知识点做一个项目了,所以接下来会实现一个小型的迷你shell程序,跟缩减版的系统shell程序,不要看着项目很小,但是五脏... 阅读全文
摘要:
今天继续对Makefile进行研究,话不多说,进入正题:make常用内嵌函数:下面利用上面的知识点来实现一个多级目录的Makefile,如下:多级目录Makefile:这个例子的目录结构如下:通过一个Makefile来最终生成一个可执行文件main,那该怎么编写呢?会利用make的内联函数,具体写法... 阅读全文
摘要:
上次随着信号学习告一段落,也标志着linux系统编程相关的知识学完了,而学了这么多知识点,是需要用一个综合的项目来将其进行串起来的,这样学习的技术才会不那么空洞,所以接下来会以一个实际例子来综合运用下所学的知识,该知识点就是涉及到linux系统编程,在开始这个项目之前,还得补充一个知识点,因为会用到... 阅读全文
摘要:
今天继续研究管道的内容,这次主要是研究一下命名管道,以及与之前学过的匿名管道的区别,话不多说,进入正题:所以说,我们要知道命名管道的作用,可以进行毫无关系的两个进程间进行通讯,这是匿名管道所无法实现的。下面来用命令创建一下:用程序来创建:另外管道文件是一种特珠类型的文件,所以不能用vim去像文本文件... 阅读全文
摘要:
今天继续研究管道,话不多说,言归正传:对于管道,有一定的读写规则,所以这里主要是对它的规则进行探讨,具体规则如下:规则一:下面用程序来验证下,还是用上节学的子进程写数据,父进程读取数据的例子,只是基于这个程序进行修改来解释上面的理论,先看一下这个原程序:#include #include #incl... 阅读全文
摘要:
今天继续学习信号,主要是学习关于时间和定时器相关的函数的使用,关于这个实际上有很多内容,这里先简要进行说明,等之后再慢慢进行相关深入,也主要是为接下来要做的一个综合linux系统编程的例子做准备,好了,进入正题:三种不同精度的睡眠:关于这个函数,实际上已经在之前使用过了,具体可以参考博文:http:... 阅读全文
摘要:
今天继续学习信号相关的知识,主要还是学习sigqueue另外信号发送函数,并配合上节学习的sigaction的用法,进入正题:sigqueue函数:sigval联合体:实际上sigval参数是用来进程间通信用的,实际上信号是一个很古老的进程间通信的一种手段,通过这个参数,可以从一个进程发送到另外一个... 阅读全文
摘要:
今天继续对信号进行学习,开始正入正题:sigaction函数:安装信号之前我们已经学过一个函数:signal,它最早是在unix上出现的,它是对不可靠信号进行安装的,之后出现了可靠信号和实时信号,所以新的安装函数sigaction函数就出现了,它的原形如下:sigaction结构体:通过man手册来... 阅读全文