在Linux下实现进度条程序,通过makefile进行编译

在Linux下实现进度条程序,通过makefile进行编译,第1张

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;

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/dianzi/2717637.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-17
下一篇 2022-08-17

发表评论

登录后才能评论

评论列表(0条)

保存