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

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、全缓冲

在这种情况下,当填满标准I/O缓存后才进行实际I/O操作。全缓冲的典型代表是对磁盘文件的读写。

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;

  • 在Linux下实现进度条程序,通过makefile进行编译已关闭评论
    A+
发布日期:2019年07月14日  所属分类:物联网