设为首页 收藏本站
查看: 609|回复: 0

[经验分享] Linux中ctags、make以及进度条小程序(\r的应用)

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-5-30 08:23:08 | 显示全部楼层 |阅读模式
一、ctags  查看函数定义的好工具
ctags -R 在当前目录建立tags文件
wKioL1dKkXDwXAxAAAAKU6-fnY8001.jpg wKioL1dKkYCCbo7QAADitB5ZtLY404.jpg
ctrl +]  + 回车 跳到函数定义处
wKiom1dKkKqAzQR_AACKxabGR0k243.jpg wKioL1dKkbzwrd1sAABVcAUP6n8296.jpg
ctrl + t 返回


二、make与Makefile
make 是一条命令
Makefile 是一个文件
make的执行需要一个Makefile文件
Makefile 两个重要关系 依赖关系 依赖方法
touch Makefile/makefile
wKiom1dKkRiQfLIkAAArUR0a60I507.jpg
1 依赖方法前面要有Tab键
wKiom1dKkTTCG8wlAAAXbbZ02CE601.jpg wKioL1dKkjfyOrcYAAD_V80X4f8002.jpg
2 进行过程从上向下 向下时只要有一个可以执行就回退(向上走、退栈) 不再执行下面的(伪目标是不执行的,这里所说的执行,是指找到依赖关系的文件,对于依赖方法执行的成功与否是不管的)
wKioL1dKklTRJX1iAABI03QLG6E123.jpg
3 这个伪目标
.PHONY:clean
clean:
rm -f 文件名
是常用的,用于清理make中间文件
调用方法:
make clean
wKiom1dKkYPx5cYuAAGDgVeZV54048.jpg
4 @屏蔽依赖方法执行细节 不在屏幕显示
wKioL1dKkqLz4eyGAABG8Amf0T8927.jpg
wKiom1dKkaiiOBH3AAAiJO6ngz0283.jpg
--------------------------------------------------

三、进度条小程序
先看看\n,\r

回车(\r只是输出到输出缓冲区)换行(\n换行才从输出缓冲区输出到屏幕上)

\r是回车,英文是Carriage return,作用:使光标到行首

\n是换行,英文是New line/line feed,作用:使光标下移一行

【注意:\n会将结果从输出缓冲区 强制刷到 显示器上 一般没有\n则结果是先输出到输出缓冲区 等输出缓冲区满 或者是程序运行结束才输出到输出显示器上】

如果用过机械打字机,就知道回车和换行的区别了。

回车就是把水平位置复位,不卷动滚筒。

换行就是把滚筒卷一格,不改变水平位置。

我们平时所说的键盘Enter键换行实则应该叫做叫做回车换行(\r\n)

看到一种说法:
windows下enter是 \r\n;
linux/unix下是\n;
mac下是\r

Windows 采用 \r\n 是有原因的,Windows 采用了传统的英文打字机的模式。

想想看英文打字机是如何换行的呢?英文打字机是选择将小车退回至起点,

这个过程称为回车(carriage return, CR),随后把小车调至下一行的位

置,这个过程称为换行(line feed, LF),这样就完成了英文打字机中换

行过程。

回车(CR)在计算机中使用 ASCII 为 13 的字符来表示(0x0D),换行(LF)使用
ASCII 为 10 的字符来表示(0x0A)。

注意:

1、windows下可直接使用\n来匹配换行符,但仍然推荐使用标准的\r\n来匹配键盘Enter键的换行符;

2、使用\r\n组合是有顺序的,调转顺序写成\n\r是错误的,将无法匹配换行符!

小的测试程序 测试\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<stdio.h>

int main()
{
// 没有\n
// 则 先输出的输出缓冲区 等程序执行结束才 输出到显示器上
// 所以 执行结果是 先睡2秒 而后输出
    //printf("%-20s","123456");

// 有\n \n是换行 会将输出缓冲区的数据 输出到屏幕上
// 执行结果是 先输出 再睡2秒
    printf("%20s\n","123456");
    sleep(2);
return 0;
}



进度条小程序
原理:
1 设置一个字符数组 用于保存输出的字符串
2 利用\r 回车 使得每次光标回到最左边,覆盖之前的字符串(这里\r 是回车 产生覆盖效果 不是换行 所以不会在下一行有输出,只是在原来的基础上变)
3 没有\n 所以利用fflush(stdout 强制从输出缓冲区输出到屏幕上)
4 每次新字符串比旧的多输出一个# 视觉上就是进度增长
5 用%-100s 固定输出长度 使得【】位置固定 -是左对齐
6 用sleep() 每次睡一会 使进度条缓慢增长
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/*************************************************************************
> File Name: proc_sleep.c
> Author: ma6174
> Mail: ma6174@163.com
> Created Time: 2016年05月27日 星期五 21时11分47秒
************************************************************************/

#include<stdio.h>
#include<string.h>

void proc()
{
const int size = 102;
char arr[size];
char state[] = "\\|/-";
memset(arr,'\0',sizeof(arr));
int count = 0;
while (count < size - 1)
{
arr[count] = '#';
printf("[%-100s][%d%%][%c]\r",arr,count++,state[count%4]);
fflush(stdout);
sleep(1);
// Sleep(1000); windows下 #include<Windows.h>
}
printf("\n");
}


int main()
{
proc();
return 0;

}



wKioL1dKk2vwBXCXAAAYvixj6_c490.jpg
wKiom1dKknLRYZNiAAAZ2NGeWp8076.jpg


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-223615-1-1.html 上篇帖子: nfs 深度讲解及inotify 下篇帖子: CentOS如何启用单一的yum源 Linux 程序
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表