Linux_基础编程day02

将近日学习Linux基础编程,系统编程,网络编程的word笔记搬运过来,图片无法直接粘贴,就丢失掉了。

日后工作学习中使用与扩充维护还是word笔记。

基础编程day02

内容简介:
学习目标:

1 掌握vim命令模式下相关命令的使用

2 从命令模式切换到编辑模式

3 末行模式

4 gcc工作流程掌握常见参数的使用

5 linux下静态库的制作和使用

6 linux下动态库的制作和使用

内容简介:

         软件的安装

                   在线,软件包,源码安装

         vim命令模式编辑模式末行模式

         vim命令模式

                   3dd,u,dG,p,yy,/查找,K,i编辑模式,ctrl+v可视模式

         vim末行模式

                   sp,vsp,ctrl+w+w,vim –o2,vsp 文件名

         ~/.vimrc与/etc/vim/.vimrc

         gcc工作流程与常用参数

                   ESc,仅汇编,-I,-L,-l,-o

         静态库的制作与使用

                   lib.XXX.a,-c生成.o,ar rcs打包,-L-l掐头去尾

         动态库的制作与使用

                   libXXX.so,fpic生成.o,gcc –shared打包,无法使用:1环境变量2文件列表3函数

零碎知识点

ls -r逐层展示当前文件夹中的内容

rm dir/* -r 删除dir中的内容,不包括dir

拷贝test中的内容到bk,不包括test

 

创建软连接的注意事项:

         ln–s 文件名 软连接的名字

                   -s必须要加

                   文件名使用绝-对路径,即使移动后该软连接依然可以使用

 

 

 

-n显示到这一行

 

压缩与解压缩

 

软件的安装和卸载

在线安装--(ubuntu apt-get)

         安装:sudo apt-get(apt,仅Ubuntu支持)install 安装包的名字

         卸载:sudo apt-get(apt) remove 软件的名字

         软件列表的更新:sudoapt-get(apt) update 更新的是官方提供的软件的链接

         清空缓存:sudo apt-get(apt) clean

                   /var/cache/apt/archives这个目录下的压缩包都被删除

软件包安装(ubuntu下 deb格式)

                   安装:sudo dpkg–i 文件名

                   卸载:sudo dpkg–r 软件的名字

源码安装:

libevent,在网络编程day05中介绍

YouComplpop就使用源码安装

                   在libevent下看README,有说明

 

1 vim需要自己安装

操作系统自带vi,但是功能比较弱,vim是vi的增强版,需要自己去安装

可将vim设置为默认的打开文本的应用程序

2 vimtutor教程

 

vim相关

vim的三种工作模式

         a命令模式:可以对文件做修改

         b编辑模式:可以对文件做修改

         c末行模式:查询替换保存退出

         vim文件名默认就是进入命令模式

vim命令模式下相关的操作:

       保存退出:ZZ(不会创建新文件)
       代码格式化:gg=G
       光标的移动:

HJKL  小键盘0移动到行首  $移动到行末

                                     gg移动到文件头部  G移动到文件的尾部

                                     200G快速定位到200

                                     200回车,当前行增加200

       删除字符

                                     X:前面的

                                     x:后面的

                                     dw:删除一个单词,光标需要在单词的开始位置

                                     d0:删除光标前面的

                                     D/d&:删除光标后面的

                                     dd:删除光标所在行,其实是剪切

                                     3dd:删除光标所在位置后3

                                     dG:删除光标所在到最后一行数据

       撤销和反撤销:

                   撤销:u

                   反撤销:ctrl+r

       复制:

                   dd:删除的一行其实是剪切

                   yy:复制一行

                   nyy:复制n行

                   p:粘贴到光标的下面(小写)

                   P:粘贴到光标的上面

       可视模式:

v  ctrl+v进入可视模式

                            可视模式下复制或删除:y/d

                            粘贴:

p粘贴到光标的后面

P:粘贴到光标的前面

       替换操作(insert):

                  r:替换一个,光标盖住的那个

                   R:替换多个,从光标盖住的这个往后替换

       查找:

                   /关键字从当前位置向下搜索

                   ?关键字 从当前位置向上搜索

                   n向下切换,N向下切换

                   #查找光标所在位置的单词

       查看man文档

                   K查看光标所在位置单词的man文档

                   不同的函数在不同的章节,shell命令可能会覆盖库中的函数,这时加上章节号

                   3K,从第三章开始查找

man 3 printf 从第三章开始找printf

man man中前三章要看,第五章了解即可

man 2 系统调用函数  /  man 3库调用函数

 

命令模式切换到编辑模式

         a:从光标后面开始插入                A:从行尾插入

         i:从光标前面开始插入               I从行首插入

         o:在光标所在位置下一行插入  O:光标上创建新行

         s:牺牲光标后面的字符                S牺牲一行

按两次esc肯定切换到了命令模式

vim末行模式:

         命令模式进入末行模式 “:”

         :200跳转到第200行

         :wq保存退出

         :q!退出不保存

         :w保存不退出

         :x   ==wq

       替换操作:

                   :/s/old/new

                   :/s/old/new/g把当前行的全部替换                                g

                  :/s/old/new/gc 添加确认                                                     c

                   :22,28s/old/new替换22-28行之间的所有old为new

                   :%s/old/new把所有行的old换为new                           %是所有行

       分屏

                   :sp                      水平分屏

                   :vsp                    垂直分屏

                   ctrl+w+w      屏幕间切换window

                   :qall:                            关闭所有        

                   :wall:              保存所有

                   :wqall:               保存关闭所有

                   :sp/vsp 文件名       分屏显示打开当前目录下的其他文件

 

                   打开文件时就是分屏

                            vim –o2 hello.c stdio.h     2要和后面的文件数量对应,也可以省略

                            -O是垂直分屏

 

在vim中执行shell命令:

         :!shell命令  再按回车键回到vim中的命令模式

 

vim配置文件

         用户级别的:仅对当前用户生效

                   ~/.vimrc 后面经常使用,安装插件等

         系统级别的:对所有用户生效,公用同一个配置文件

                   /etc/vim/vimrc

         优先使用用户级别的配置文件。

gcc相关

1 gcc的工作流程 Esc
              1预处理:-E

                            宏替换

                            头文件展开

                            注释去掉

                            xxx.c-> xxx.i

                                     xxx.i还是c文件

              2编译:-S 花费时间最多

                            xxx.i-> xxx.s

                                     汇编文件

              3汇编:-c

                            xxx.s-> xxx.o

                                     二进制文件(库,二进制的源码,保密)

              4链接

                            xxx.o-> xxx(可执行)

                   gcc调用cpp进行预处理

                   gcc自己完成编译

                   gcc调用as完成汇编

                   gcc调用ld进行链接

         gcchello.c –o hello 不加名字,默认生成a.out

2 gcc常用参数

         -v/--version:查看版本

         -I:编译的时候指定头文件的路径(大写)

                  gcc sum.c–I ./include/ -o sum                   在当前目录下的include文件夹内查找

         -c:将汇编文件生成二进制.o文件,还是源代码(制作库)

         -o:指定文件的名称

         -ggdb调试的时候需要加

release模式和debug模式的区别,release模式打断点是不会停止的

         -D:在编译的时候指定一个宏

                   使用场景:测试程序时,-DDEBUG这个宏会在预处理时加入

         -Wall:显示警告信息

         -On:优化代码,n是优化级别:1,2,3

 

静态库和动态库的制作和使用

      1 库是什么

                   二进制文件

                   将源代码à二进制格式的源代码

                   加密,别人只能用(生成可执行文件),不知道写的是什么

      2 库制作出来之后,如何给用户使用

                   头文件(说明书)

                   制作出的库

      3 静态库的制作和使用

命名规则:libtest.a

         lib

         xxx:库的名字

         .a

              3.1制作步骤:

                            原材料:源代码.c  .cpp      一般放在src目录中

                            1 将.c文件生成.o

                                     gcca.c b.c –c

                            2 将.o文件打包成静态库

                                     ar rcs 静态库的名字原材料

                                     ar-  archive             ar rcs libtest.a a.o b.o

                            3 nm查看静态库中的内容

              3.2库的使用:

                            gccmain.c –i ./include/ -L ./lib –l ./test-o app (test为库的名字)

                                     -I:要保证头文件

-L:指定静态库的路径

-l:指定库的名字(掐头去尾)

-o:指定生成的可执行程序的名字

lib a静态(a…); dll so 动态(so?)

4 动态库的制作和使用 .so.1.7版本

      命名规则

                   libxxx.so

      制作步骤

                   1将源文件生成.o

                            gcc a.c b.c –c –fpic(FPIC)

                   2打包

                            gcc–shared –o libxxx.so a.o b.o

      库的使用

                   1头文件a.h

                   2动态库libtest.so

                   3参考头文件编写测试程序main.c

                   gccmain.c –I ./include/ -L ./ -l test –o app

库的搜索顺序

linux下可执行程序格式是elf,搜索动态库顺序 elf内某段à环境变量—>etc/ld.so.cacheàusr/lib如果将.so添加到lib中,有可能与原有的lib重名,覆盖,使系统无法正常工作

      动态库无法使用
              1使用环境变量

                            临时设置,仅本次打开的本终端有效

                                     export LD_LIBRARY_PATH = 动态库的路径:$LD_LIBRARY_PATH

                                               不覆盖原有的值,将新值拼接在后面

                            永久设置

                                     用户级别,仅对当前用户有效

                                               ~/.bashrc

                                               配置完成,重启终端,因为终端只在启动的时候读一次这个配置文件

                                               source~/.bashrc 指令可强制加载一次

                                     系统级别,对所有用户有效

                                               /etc/profile

                                               source/etc/profile,强制加载一次,否则需要重启

              2 etc/ld.so.cache文件列表

                            找到一个配置文件

                                     /etc/ld.so.cnf

                                     把动态库的绝对路径加入文件中

                            执行一个命令

                                     sudoldconfig –v

3 dlopen,dlclose,dlsym

 

env看所有的环境变量,是键值对,echo$PATH查看PATH环境变量的值,$是取值的意思,路径有很多,相邻之间:间隔

ldd app; 查看app运行时需要链接哪些动态库

file f1 ; 可以查看f1文件的属性

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值