都知道vim是Linux下的编辑器之神,当然还有emacs也是特别NB的,个人在Linux下比较常用的也就是Vim了,接下来说说vim的一些配置技巧:
cfunc Setfilehead()
call append(0, '/***********************************************')
call append(1, '# Filename: '.expand("%"))
call append(2, '# Author: Tim 15291418231@163.com')
call append(3, '# Description: ---')
call append(4, '# Create: '.strftime("%Y-%m-%d %H:%M:%S"))
call append(5, '# Last Modified: '.strftime("%Y-%m-%d %H:%M:%S"))
call append(6, '***********************************************/')
call append(7, '')
call append(8, '#include <stdio.h>')
call append(9, '#include <stdlib.h>')
call append(10, '#include <unistd.h>')
call append(11, '#include <sys/types.h>')
call append(12, '')
call append(13, 'int main(int argc, char *argv[]){')
call append(14, '')
call append(15, ' return 0;')
call append(16, '}')
endfunc
"映射F1快捷键,生成后跳转至第14行,然后进入vim的插入模式
map <F1> :call Setfilehead()<CR>:14<CR>o
这样的话只要新建源文件的时候按一下F1,代码就会自动添加到源文件中了!
这里推荐使用几个开源项目: 《VimForCpp》 这个目前只适用于CentOS7,其他版本后续才会支持! 《space-vim》这个也是比较好用的一个vim,插件都是一句代码全部搞定!
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 -E -o hello.i hello.c
② 编译:语法检查、生成汇编代码
gcc -S -o hello.s hello.i
③ 汇编:汇编代码------->机器码
gcc -c -o hello.o hello.s
④ 链接:链接为可执行文件
gcc -o hello hello.o
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()函数的单位、如何打印彩色字体
c/*************************************************************************
> File Name: main.c
> Author: Tim
> Mail: 15291418231@163.com
> Created Time: 2018年09月21日 星期五 03时23分51秒
************************************************************************/
#include<unistd.h>
#include<stdio.h>
int main(int argc, char *argv[])
{
char buf[102] = {0};
int i = 0;
//注意这里需要使用转义字符
char arr[4] = "/-|\\";
for(i= 0;i<=100;i++)
{
buf[i] = '*';
if(i<40)
printf("[\033[0;31m%-100s\033[0;39m] [%d%%][%c]\r", buf,i,arr[i%4]);//进度条颜色修饰
else if(i>=40 && i< 80)
printf("[\033[0;33m%-100s\033[0;39m] [%d%%][%c]\r",buf,i,arr[i%4]);
else
printf("[\033[0;32m%-100s\033[0;39m] [%d%%][%c]\r",buf,i,arr[i%4]);
//printf("[%-100s] [%d%%][%c]\r",buf,i,arr[i%4]);
//printf是按行缓冲的,所以需要刷新缓冲区
fflush(stdout);
//usleep的单位是微秒
usleep(50000);
}
//最后需要换行
printf("\n");
return 0;
}
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显示进度条
rpm软件包形式的管理虽然方便,但是需要手工解决软件包的依赖关系。很多时候安装一个软件安装一个软件需要安装1个或者多个其他软件,手动解决时,很复杂,yum解决这些问题。Yum是rpm的前端程序,主要目的是设计用来自动解决rpm的依赖关系,其特点:
yum仓库用来存放所有的现有的.rpm包,当使用yum安装一个rpm包时,需要依赖关系,会自动在仓库中查找依赖软件并安装。仓库可以是本地的,也可以是HTTP、FTP、nfs形式使用的集中地、统一的网络仓库。 仓库的配置文件/etc/yum.repos.d目录下
本文作者:Tim
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!