前情提要 在笔者的上一篇博客Linux系统编程[3.1]--编写ls命令中,实现了初级版的ls命令,但是与原版ls命令相比,还存在着显示格式和无颜色标记的不同.经过笔者近两天的学习,基本解决了这两个问题,且实现了"ls -l",并对于可选参数"-a"和"-l"有了更好的支持(不管-a,-l输入顺序如何,是"ls -a -l",还是"ls -l -a",还是"ls -al",亦或是&quo…
ls用于列举目录内容,要实现这个功能,毫无疑问,需要读取目录,涉及到两个api: opendir:DIR *opendir(const char *name), 传文件名,返回一个指针,指向目录序列 readdir:struct dirent *readdir(DIR *dirp), 把opendir的返回值传过来,   返回值为一个结构体 struct dirent { ino_t d_ino; /* inode number */ off_t d_off; /* not an offset;…
学到的知识点 通过实现who命令,学到了: 1.使用man命令寻找相关信息 2.基于文件编程 3.体会到c库函数与系统调用的不同 4.加深对缓冲技术的理解 who命令的作用 who命令的使用 在控制终端输入: man who 结果如下图所示 可以看出,who命令的使用很简单,直接在终端输入: who 作用就是显示当前登录的用户信息. who命令的显示结果含义 第一列表示已登录用户,第二列表示终端名,第三列表示登录时间,第四列表示用户的登录地址. 如何实现who命令 逆向推导 定位文件 who命令…
之前已经花了不少篇幅学习了linux系统编程的很多知识点:文件与io.进程.信号.管道,而零散的知识点,怎么能够综合的串接起来是学习的一个很重要的目的,当然最好的方式就是用所学的知识点做一个项目了,所以接下来会实现一个小型的迷你shell程序,跟缩减版的系统shell程序,不要看着项目很小,但是五脏俱全,先来看一下我们要实现的功能: 如exit会退出程序等. 另外还能捕捉一些信号,如:ctrl+c,也能忽略一些信号,如:ctrl+\,禁止退出自己的程序,这里就不演示了. 下面就来从零开始一步步实…
cp命令的基本用法: cp 源文件 目标文件 如果目标文件不存在 就创建, 如果存在就覆盖 实现一个cp命令其实就是读写文件的操作: 对于源文件: 把内容全部读取到缓存中,用到的函数read 对于目标文件: 把缓存中的内容全部写入到目标文件,用到的函数creat /*================================================================ * Copyright (C) 2018 . All rights reserved. * * 文件名…
上节中已经对后台作业进行了简单处理,基本上要实现的功能已经完了,下面回过头来,对代码进行一个调整,把写得不好的地方梳理一下,给代码加入适当的注释,这种习惯其实是比较好了,由于在开发的时候时间都比较紧,都只是想办法去尽快实现,而肯定会有一些代码是写得不太好的,所以有时间的话最好是从头至尾将整个代码进行梳理,也许在梳理的过程中会发现许多不足的地方,好了,下面开始: 而这个信号安装函数是在init.c中实现的: 接下来进行shell循环: 它的实现是在parse.c中: 如注释所示,可以挪至init.…
上节中已经实现了对普通命令的解析,包括输入重定向,输出重定向,管道,后台作业,这次就来执行已经解析好的命令,对应的函数为:execute_command(),首先对带有管道的命令进行执行: 比如:"ls | grep init | wc -w"这条命令,有两条管道,其中最后一条命令是不需要管道的: [说明]:对于管道的创建,可以参考博文:http://www.cnblogs.com/webor2006/p/3768752.html 另外我们知道,对于创建的管道fds,其中fds[0]表…
上节minishell当中,已经初步实现了一个简单命令的解析,这节来继续对更加复杂命令进行解析,包含:输入重定向的解析.管道行的解析.输出重定向的解析以及是否有后台作业的解析,如下: 下面对其进行实现,上节中实现了对单条命令的解析,如下: 这节因为是多条,所以解析命令的实现也得重新开始写,在写之前,先列一个实现步骤: 先写一个流程伪代码,交其框架定出来,然后再去实现一个个功能函数,最后整个功能完成,这是一个比较好的编码习惯,先全局,先局部: 下面先定义未实现的函数:   然后再定义用到的全局变量…
1. ls命令 ls命令是列出目录内容(ListDirectory Contents)的意思.运行它就是列出文件夹里的内容,可能是文件也可能是文件夹. "ls -l"命令已详情模式(longlisting fashion)列出文件夹的内容. "ls -a"命令会列出文件夹里的所有内容,包括以"."开头的隐藏文件. 注意:在Linux中,文件以"."开头的就是隐藏文件,并且每个文件,文件夹,设备或者命令都是以文件对待.ls -l…
背景介绍 笔者知识背景 笔者接触Linux快一年了.理论知识方面:学习了操作系统基础知识,了解进程调度.内存分配.文件管理.磁盘I/O这些基本的概念. 实操方面:会使用Linux简单命令,在嵌入式系统设计课程实验中完成Linux内核编译和烧写.在信息安全实践课程实验上基于Linux操作系统完成HTTPS原理实操.CSRF.XSS.点击劫持的攻防,以及在Linux操作系统的云服务器上部署自己的博客. 如果仅仅是将Linux操作系统作为工具,使用它提供的功能,掌握简单的命令和上网搜索这一技能就基本能…