1. 在Linux下实现进度条程序。 通过makefile进行编译。 建议自主完成一个彩色的进度条。
写Makefile文件的原因:Makefile文件的作用是命令行编译链接命令nmake使用的文件。它以人本方式规定了make要编译哪些文件,生成哪些文件,要链接哪些文件,生成的.exe文件的名称等。
思路:
1. 进度条由0%-100%,在字符数组中输出一串字符时,最后以”\0”结束的,所以需要一个大小为102的数组,加载橙红的数据用”=”表示。
2. 进度条会出现一个区间,然后在里面进行加载,故先用”[“”]”表示加载的区间。
3. 定义一个rate标识进度。没进行一次加一,直到100停止
4. 在进行回车前,需要进行刷新
5. 在加载进度时,通过sleep()&usleep()控制睡眠时间,sleep表示秒,usleep表示微妙。
6. 对于加载中旋转的小圈通过”-|/”顺时针进行。
主要代码如下
#include #include int main() { int rate =0; char str[102]={0}; char * sta=“-\|/”; while(rate《=100) { str[rate]=“-”; printf(“[%-100s],%d%%,[%c]\r”,str,rate,sta[rate%4]); rate++; ffush(stdout); usleep(100000); } retunr 0; }
Linux下程序编写完成之后,在进行编译链接生成可执行文件
方式1 gcc test.c -o test
。/a.out
方式2 编译makefile文件
test:test。o gcc -o test -o test.o test.o:test.s gcc -C test.i -o test.o test.s:test.i gcc -S test.i -p test.i test.i:test.c gcc -E test.c -o test.i .PHONY:clean clean: rm -f test.o rm -f test.s rm -f test.i rm -f test 1.回车(\r)和换行(\n)
回车和换行是两个不同的概念,回车:表示回到当前行的行首。换行:表示光标进入当前行的下一行
在Linux中,\n会进行回车+换行 *** 作,而/r不会进行回车 *** 作,只会被当做控制字符处理。
在Windows下,每行的结尾是《\n》《\r》;在Linux下,每行的结尾是《\n》。所以,Linux下打开Windows的文件,每行会多出一个^M符号;而在Windows下打开Linux文件,所有的内容变成一行。
2.缓冲区
####(1)什么是缓冲区?
缓冲区又称为缓存,它是内存空间的一部分,在内存空间中预留了一定的存储空间,这些空间用来缓冲输入或输出的书库,这部分预留的空间就叫做缓冲区。
缓冲区根据其对应的是输入涉笔还是输出设备,分为输入缓冲区和输出缓冲区。
(2)为什么要引入缓冲区
比如我们从磁盘里取信息,我们先把读出的数据放在缓冲区,计算机再直接从缓冲区中取数据,等缓冲区的数据取完后再去磁盘中读取,这样就可以减少磁盘的读写次数,再加上计算机对缓冲区的 *** 作大大快于对磁盘的 *** 作,故应用缓冲区可大大提高计算机的运行速度。
又比如,我们使用打印机打印文档,由于打印机的打印速度相对较慢,我们先把文档输出到打印机相应的缓冲区,打印机再自行逐步打印,这时我们的CPU可以处理别的事情。
现在您基本明白了吧,缓冲区就是一块内存区,它用在输入输出设备和CPU之间,用来缓存数据。它使得低速的输入输出设备和高速的CPU能够协调工作,避免低速的输入输出设备占用CPU,解放出CPU,使其能够高效率工作。
(3)缓冲区的类型
缓冲区 分为三种类型:全缓冲、行缓冲和不带缓冲。
a、全缓冲
b、行缓冲
在这种情况下,当在输入和输出中遇到换行符时,执行真正的I/O *** 作。这时,我们输入的字符先存放在缓冲区,等按下回车键换行时才进行实际的I/O *** 作。典型代表是键盘输入数据。
c、不带缓冲
也就是不进行缓冲,标准出错情况stderr是典型代表,这使得出错信息可以直接尽快地显示出来。
(4)缓冲区的刷新 下列情况会引发缓冲区的刷新: 1、缓冲区满时; 2、执行flush语句; 3、执行endl语句; 4、关闭文件。 可见,缓冲区满或关闭文件时都会刷新缓冲区,进行真正的I/O *** 作。另外,在C++++中,我们可以使用flush函数来刷新缓冲区(执行I/O *** 作并清空缓冲区),如:cout《Linux下呢,有一个万能的“男人”,我们有什么不懂得,就可以去问这个“男人”,它就是man指令。下面我们以查询fflush()函数的头文件来使用man命令查询,输入man fflush后按回车键,就会出现一个查询文档。
2.Linux下软件安装的几种方式
rpm安装的常用选项
*** 作符 作用
rpm -ivh full_pkgname 安装
rpm -e pkgame 卸载
rpm -qa[pkgame] 列出所有已经安装过的包
rpm -ql pkgame 列出一个已经安装的包安装了哪些文件
rpm -qf file 列出某个文件由哪几个包安装
rpm -qi file 查询某个安装包的详细信息
rpm -nodeps 强制安装,不用管其他依赖的包
rpm -force 强制安装,而不管系统中有没有安装过这个包
yum安装
- yum工具是RedHat公司开发的用于管理rpm包的工具
- 使用yum安装rpm包可以自动解决包之间的依赖关系
- 我们可以自定义yum的源,可以搭建本地yum仓库
- yum源配置文件为/etc/yum.repos.d/CentOS-Base.repo
*** 作符 作用
yum install pkg 安装rpm包
yum remove pkg 卸载rpm包
yum list 从配置文件中指定的yum源列出所有的rpm安装包
yum search xxx 搜索rpm包
yum groupinstall grp 安装rpm组件
yum groupremove grp 卸载rpm组件
yum grouplist 列出所有的rpm组件
yum update/yum upgrade 更新所有的rpm包
搭建本地yum库
1. 将centos安装盘或安装镜像挂载到指定路径mnt/
2. 备份好配置文件 /etc/yum.repos.d/CentOS-Base.repo到一个指定路径
3. 删除配置文件 /etc/yum.repos.d/CentOS-Base.repo
4. 编辑另一个配置文件 /etc/yum.repos.d/CentOS-Media.repo
[local-cdrom] —-》 yum list 时显示在最右边的标识;
name=cd —-》 yum 仓库标识;
baseurl=file:///mnt/ —-》 指定 rpm 仓库路径;
gpgcheck=0 —-》 不检测;
enabled=1 —-》 允许 ;
5. 保存退出
使用yum只下载不安装rpm包
1. 先安装一个插件:yum install -y yum-plugin-downloadonly;
2. 对于未安装过的 rpm 包:yum install -y pkg –downloadonly;
3. 对于已经安装过的:yum reinstall -y pkg –downloadonly;
4. 指定 rpm 包的下载路径:yum install -y pkg –downloadonly –downloaddir dir.
源码安装
1. 下载源码包尽量从官网下载,保证安全
2. 源码包保存路径约定为:/usr/local/src/
3. 安装路径约定为:/usr/local/源码包名
4. 安装开始前,先要查看安装说明 vim INSTALL vim README
5. 查看配置参数:。/configure –help
6. 安装过程中,每进行完一步要使用echo $? 进行验证前一步是否产生错误
*** 作符 作用
。/configure –help 查看所有配置参数及含义
。/configure … 配置安装路径、安装模块
make 编译
make install 安装
echo $! 检查上一步安装是否出错,‘0’:正确;‘1’:错误
调研task_struct结构体, 理解结构体中的各个字段的含义
Linux内核通过一个被称为进程描述符的task_struct结构体来管理进程,
task_struct是Linux中的【进程控制块PCB结构】的具体数据结构
这个结构体包含了一个进程所需的所有信息。它定义在linux-2.6.38.8/include/linux/sched.h文件中。
下面对task_struct这个结构体 进行各个字段的详细介绍
1. 调度数据成员 (1) volaTIle long states;
表示进程的当前状态:
- TASK_RUNNING:正在运行或在就绪队列run-queue中准备运行的进程,实际参与进程调度。
- TASK_INTERRUPTIBLE:处于等待队列中的进程,待资源有效时唤醒,也可由其它进程通过信号(signal)或定时中断唤醒后进入就绪队列run-queue。
- TASK_UNINTERRUPTIBLE:处于等待队列中的进程,待资源有效时唤醒,不可由其它进程通过信号(signal)或定时中断唤醒。
- TASK_ZOMBIE:表示进程结束但尚未消亡的一种状态(僵死状态)。此时,进程已经结束运行且释放大部分资源,但尚未释放进程控制块。
- TASK_STOPPED:进程被暂停,通过其它进程的信号才能唤醒。导致这种状态的原因有二,或者是对收到SIGSTOP、SIGSTP、SIGTTIN或SIGTTOU信号的反应,或者是受其它进程的ptrace系统调用的控制而暂时将CPU交给控制进程。
- TASK_SWAPPING: 进程页面被交换出内存的进程。
(2) unsigned long flags;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)