Linux下开发工具
编辑器-Vim
都知道vim是Linux下的编辑器之神,当然还有emacs也是特别NB的,个人在Linux下比较常用的也就是Vim了,接下来说说vim的一些配置技巧:
配置常见的代码模板
1func Setfilehead()
2 call append(0, '/***********************************************')
3 call append(1, '# Filename: '.expand("%"))
4 call append(2, '# Author: Tim 15291418231@163.com')
5 call append(3, '# Description: ---')
6 call append(4, '# Create: '.strftime("%Y-%m-%d %H:%M:%S"))
7 call append(5, '# Last Modified: '.strftime("%Y-%m-%d %H:%M:%S"))
8 call append(6, '***********************************************/')
9 call append(7, '')
10 call append(8, '#include <stdio.h>')
11 call append(9, '#include <stdlib.h>')
12 call append(10, '#include <unistd.h>')
13 call append(11, '#include <sys/types.h>')
14 call append(12, '')
15 call append(13, 'int main(int argc, char *argv[]){')
16 call append(14, '')
17 call append(15, ' return 0;')
18 call append(16, '}')
19endfunc
20
21"映射F1快捷键,生成后跳转至第14行,然后进入vim的插入模式
22map <F1> :call Setfilehead()<CR>:14<CR>o
这样的话只要新建源文件的时候按一下F1,代码就会自动添加到源文件中了!
已经配置好的Vim
这里推荐使用几个开源项目: 《VimForCpp》 这个目前只适用于CentOS7,其他版本后续才会支持! 《space-vim》 这个也是比较好用的一个vim,插件都是一句代码全部搞定!
vim和emacs的比较
- VIM和emacs是可以高度可定制化的编辑器,特别是emacs算是unix下的第一个“人工智能生命”,经过定制化以后几乎可以干任何事情,VIM在高度定制化以后的编辑速度(当然,前提是你要熟悉它的几种工作模式,特别是快捷键的应用),几乎是其它编辑器不可匹敌的
- VIM和emacs属于神器级别的东西,用的好就是神器,用不习惯它就是垃圾,对于大部分人来说他们都是需要比较长的时间才能上手的东西,而UE这样的属于已经给你定制好了,但是没有过多可定制选项的编辑器,方便上手,但是扩展性能就不怎么样了
编译器-gcc
gcc是"GNU Compiler Collection"的缩写
-I:指定头文件路径 -On:n=0~3,编译器优化,n越大优化等级越高 -Wall:提示更多的警告信息 -D:编译器时定义宏,注意-D和宏之间没有空格 -g:包含调试信息 这样编译才能被GDB调试 -C 告诉预处理器不要丢弃注释。配合`-E’选项使用。 -M:生成与.c和头文件的依赖关系以用于Makefile,包括系统库的头文件 -MM:生成与.c和头文件的依赖关系以用于Makefile,不包括系统库的头文件 -v可以查看gcc的版本信息,但是要是在gcc -v 后面加上一个源文件例如,gcc -v main.c,这样可以获得gcc所使用的系统头文件。
GCC编译C/CPP程序步骤
① 预处理:头文件展开、宏替换、去注释
1gcc -E -o hello.i hello.c
② 编译:语法检查、生成汇编代码
1gcc -S -o hello.s hello.i
③ 汇编:汇编代码——->机器码
1gcc -c -o hello.o hello.s
④ 链接:链接为可执行文件
1gcc -o hello hello.o
readelf命令
readelf命令用来显示一个或者多个elf格式的目标文件的信息,可以通过它的选项来控制显示哪些信息。
ELF(Executable and Linking Format)是一个定义了目标文件内部信息如何组成和组织的文件格式。内核会根据这些信息加载可执行文件,内核根据这些信息可以知道从文件哪里获取代码,从哪里获取初始化数据,在哪里应该加载共享库,等信息。
ELF文件有下面三种类型:
1、目标文件
gcc -c test.c
得到的test.o就是目标文件,目标文件通过链接可生成可执行文件。
静态库其实也算目标文件,静态库是通过ar命令将目标打包为.a文件。
如:ar crv libtest.a test.o
2、可执行文件
gcc -o test test.c
得到的test文件就是可执行的二进制文件。
3、共享库
gcc test.c -fPIC -shared -o libtest.so
得到的文件listtest.so就是共享库。
可以通过readelf来区分上面三种类型的ELF文件,每种类型文件的头部信息是不一样的!
实现一个彩色的进度条
注意点:printf()是按行缓冲的、sleep()与usleep()函数的单位、如何打印彩色字体
1/*************************************************************************
2 > File Name: main.c
3 > Author: Tim
4 > Mail: 15291418231@163.com
5 > Created Time: 2018年09月21日 星期五 03时23分51秒
6 ************************************************************************/
7
8#include<unistd.h>
9#include<stdio.h>
10
11int main(int argc, char *argv[])
12{
13 char buf[102] = {0};
14 int i = 0;
15 //注意这里需要使用转义字符
16 char arr[4] = "/-|\\";
17 for(i= 0;i<=100;i++)
18 {
19 buf[i] = '*';
20 if(i<40)
21 printf("[\033[0;31m%-100s\033[0;39m] [%d%%][%c]\r", buf,i,arr[i%4]);//进度条颜色修饰
22 else if(i>=40 && i< 80)
23 printf("[\033[0;33m%-100s\033[0;39m] [%d%%][%c]\r",buf,i,arr[i%4]);
24 else
25 printf("[\033[0;32m%-100s\033[0;39m] [%d%%][%c]\r",buf,i,arr[i%4]);
26
27 //printf("[%-100s] [%d%%][%c]\r",buf,i,arr[i%4]);
28
29 //printf是按行缓冲的,所以需要刷新缓冲区
30 fflush(stdout);
31 //usleep的单位是微秒
32 usleep(50000);
33 }
34 //最后需要换行
35 printf("\n");
36 return 0;
37}
yum与rpm安装的区别
源代码安装
- 绝大多数开源软件都是直接以原码形式发布的
- 源代码一般会被打成.tar.gz的归档压缩文件
- 源代码需要编译成为二进制形式之后才能够运行使用
- 源代码基本编译流程:
- configure 检查编译环境;
- make对源代码进行编译;
- make insall 将生成的可执行文件安装到当前计算机中
rpm安装
1.源代码形式的特点:操作复杂、编译时间长、极易出现问题、依赖关系复杂
2.为了方便,RPM(redhat package manager)
3.RPM通过将代码基于特定平台系统编译为可执行文件,并保存依赖关系,来简化开源软件的安装管理。针对不同的系统设定不同的包
4.常用命令规范:linuxcast-1.2.0-30.el6.1686.rpm 包名-版本号-适用平台-32/64-rpm
5.使用rpm –i software.rpm(安装);
rpm -e software.rpm
(卸载);
rpm –U software.rpm
(升级形式安装);
rpm –ivh http://www.linuxcast.net/software.rpm
(支持通过http\ftp协议形式安装)
-v 显示详细信息;-h显示进度条
yum安装
rpm软件包形式的管理虽然方便,但是需要手工解决软件包的依赖关系。很多时候安装一个软件安装一个软件需要安装1个或者多个其他软件,手动解决时,很复杂,yum解决这些问题。Yum是rpm的前端程序,主要目的是设计用来自动解决rpm的依赖关系,其特点:
- 自动解决依赖关系;
- 可以对rpm进行分组,基于组进行安装操作;
- 引入仓库概念,支持多个仓库
- 配置简单
yum仓库用来存放所有的现有的.rpm包,当使用yum安装一个rpm包时,需要依赖关系,会自动在仓库中查找依赖软件并安装。仓库可以是本地的,也可以是HTTP、FTP、nfs形式使用的集中地、统一的网络仓库。 仓库的配置文件/etc/yum.repos.d目录下
- yum install 安装;
- yum remove卸载;