02、老徐教你学C语言基础篇2——C语言摩拳擦掌齐上阵(环境篇)——Linux编程软件

来源:互联网 发布:js节点 元素 编辑:程序博客网 时间:2024/05/26 19:14
前面我们完成了Linux操作系统的安装,但是离编程还有一段路要走,那么下面让我们把剩下的路走完吧~

1、Linux存储及目录结构介绍

        刚进入Linux系统,初学者都在找“我的电脑”、C盘、D盘、E盘,很遗憾,没找到~
        请记住两句话,大树底下好乘凉!一切皆文件!
        具体解释:Linux系统以文件目录的方式来组织和管理系统中的所有文件。
        我们打开任何一个分支的Linux系统的文件系统目录,都会看到以下类似的目录:
/home /usr /root /boot /mnt /var /sys /etc /lib /proc /dev

具体解释:Linux与windows对硬盘的管理访问机制不一样
       windows采用横向管理机制管理磁盘:
         首先把windows分成几个分区(主分区、逻辑分区),然后在某个主分区上安装操作系统,其它分区或者设备(U盘、SD卡、光驱)以盘符的形式出现在我的电脑里,我们通过打开我的电脑访问。

        linux采用树状的方式管理访问磁盘:
        Linux在一个分区安装好后(此分区我们可称之为根文件系统),最顶层有一个/作为顶层目录,以下再划分为不同目录存放不通用途的文件,其它分区或者设备(U盘、SD卡、光驱)通过/目录下的某个目录进行访问。所以你在Linux下看不到类似windows的盘符的概念,在Linux下我们看到的就是一个个文件、文件夹,我们对磁盘数据、存储系统、硬件设备的访问都被抽象成对文件或者文件夹的操作。

  如果你想了解一下Linux系统下的这些目录具体有什么作用,请参考以下文章。

2、Linux下常用命令介绍
无兄弟,不Dota,还记得当年调整夜战,开黑虐人的快感么~

        Linux刚出世时没有什么图形界面,所有的操作全靠命令完成;
        近几年来,Linux发展的非常迅速,图形界面越来越友好,但是在真正的开发过程中,Linux命令行的应用还是占有非常重要的席位的;
        许多Linux功能在命令行界面要比图形化界面下运行的快,有些使用Linux的场合甚至没有图形化的界面
“无命令、不Linux”——让我们一起走入Linux命令的世界

a、Linux命令格式:
command  [-options]  [parameter1]  … 
说明:
command:
命令名:相应功能的英文单词或单词的缩写
[-options]:
选项:可用来对命令进行控制,也可以省略
parameter1 …:
传给命令的参数:可以是零个一个或多个
例:ls  -alh  /home

b、命令使用方法

--help

一般是Linux命令自带的帮助信息

例:ls --help

man(manual)

有问题找男人

man是Linux提供的一个手册,包含了绝大部分的命令、函数使用说明

该手册分成很多章节(section),使用man时可以指定不同的章节来浏览。

例:man ls   ;  man 3  printf 

   (printf既是命令又是函数,可使用 数字选定章节)


c、命令使用方法:

自动补全:

敲出命令前几个字母的同时按下tab键,系统会帮我们补全命令

历史命令:

当系统执行过一些命令后,可按上下键翻看以前的命令  

history将执行过的命令列举出来

重定向:>  

本应显示在终端上的内容保存到执行文件中

例:ls > test.txt;  ls --help > test.txt

管道:|

一个程序的输出作为另一个程序的输入

ls | less   ;  ls | more


d、一些基本的命令:

ls:显示目录内容
-l:列表显示
-a:显示隐藏文件

-h:配合-l以人性化的方式显示文件大小


tree:以树状形式显示目录结构
-L n(n为要查看的层数)
系统默认没有此命令

安装:sudo apt-get install tree


clear:

清除终端上的显示


cd:切换目录

cd  /home可进入home(指定)目录

cd  .. 可进入上一层目录

cd  - 可进入上一个进入的目录

cd  ~ 可进入用户的家目录(~:代指家目录)


pwd:显示当前工作目录的绝对路径


mkdir:创建目录
     -p 递归地在指定路径建立文件夹


touch:创建文件

touch test.c


cat:显示文本文件内容

cat test    显示test文件的内容


rm:删除文件/目录

rm  file1  -rf

-r:删除文件夹时必须加此参数

-f :强制地删除文件,如果没有不出错


cp:复制文件

cp  /etc/profile  /home

-R:拷贝文件夹

-v:显示拷贝进度


mv:移动文件或更改文件名

mv file1 file2

mv file1 /home

–v:同cp


find:在指定路径下查找指定文件

用法:find 路径名-name 文件名

例子:find  /home  -name  test.txt

//在根目录的home目录下查找名为test.txt的文件


grep:在指定文件中查找指定内容

用法:grep 查找信息  文件名 参数-n 显示行号

例子1:grep aaa test.c -n

//在当前文件test.c中查找aaa信息,并显示行号

例子2:grep aaa ./* -R -n

//在当前文件夹下的所有文件查找包含aaa信息的文件


Linux下建议压缩与解压缩的命令:

gzip格式:

压缩用法:tar zcvf 压缩包包名 文件1 文件2 ...

例子:tar   zcvf    bk.tar.gz    *.c

解压用法:tar xvzf 压缩包包名 

例子: tar   zxvf    bk.tar.gz

 解压到指定目录:-C

例子:tar zxvf bk.tar.gz -C ./test

//将bk.tar.gz解压到当前目录下的test目录下


bz2格式:

压缩用法: tar jcvf 压缩包包名 文件1 文件2 ...

例子:tar  jcvf  bk.tar.bz2  *.c

解缩用法: tar jxvf 压缩包包名

例子: tar  jxvf  bk.tar.bz2

解压到指定目录:-C

例子:tar  jxvf  bk.tar.bz2  -C  ./



3、Linux下文本编辑器vi
        磨刀霍霍向牛羊,没有刀,怎么杀猪
        没有编辑器,我们怎么写程序?
        还想像windows的vc或者notepad++一样轻松惬意的写着程序、喝着酒么?
        很遗憾,在Linux的世界里,请准备好,一起迎接我们的编辑器之神吧—vi
        号称只有神才能使用的编辑器哦~

a、安装vim(ubuntu本身带的vi不是很完整)
sudo apt-get install vim

b、安装ctags(一个函数提示插件)
sudo apt-get install ctags

c、我们自行定制的一个插件,加速C语言编写
step1:将vim_configure拷入当前用户的目录下(使用samba或共享文件夹完成)
step2:打开终端,执行以下以下命令:
cd vim_configure
./copy_con.sh
拷贝成功后,出现copy successful
(如提示没有权限:请使用:chmod +x copy_con.sh增加执行权限)

文件下载请参考:


vi filename:打开或新建文件,并将光标置于第一行行首


d、三大模式:

1)vi插入模式

vi创建一个不存在文件时,默认进入插入模式

vi将输入的字符作为正文内容放在正在编辑的文件中


2)vi编辑模式

vi打开一个已经存在文件时,默认进入编辑模式

在此模式下可进入插入模式、控制屏幕光标的移动、进行文本的选择、复制、粘贴、剪切、删除、查找等工作。


3)vi最后一行模式(命令模式)

在编辑模式下,按shift+:进入

跟编辑模式类似,完成存盘、另存、查找等任务


e、模式切换

1)由编辑模式切换到插入模式

i 从光标当前位置开始插入 

o 在光标位置的下行插入一个空行,再进行插入


2)由编辑模式切换到命令模式

shift + :

由插入模式、命令模式切换到编辑模式

esc


3)插入模式与命令模式不能直接转换


f、编辑模式命令:

编辑模式下删除和修改文本

1)  u         撤消前面多次修改。
2)  [n]x     删除光标后n个字符。
3)  [n]X     删除光标前n个字符。
4)  [n]dd   删除从当前行开始的n行。
5)  [n]yy复制从当前行开始的n行。

6)  p          把粘贴板上的内容插入到当前行。
7)  .          执行上一次操作
8)  shift +zz(按住shift按两下z键) 保存退出当前文件

9)编辑模式下移动光标

[n]G:将光标定位到第n行开始处

G: 将光标定位到文件结束处

gg:将光标定位到文件开始处


10)编辑模式下的查找

/字符串:从光标开始处向文件尾查找字符串。

n:同一方向重复上一次查找命令。

N:反方向重复上一次查找命令


g、最后一行模式:

文件存储类:

:w       保存当前文件

:w  file 另存当前文件为file

:wq 保存当前文件,退出

:q!            不保存文件并退出


配合搜索命令使用:

:nohls 取消高亮

:set hls 设置高亮


h、ctags和自定义插件带来的额外命令
  1. 自动添加创建时间、名称等注释信息
  2. 自动添加行号
  3. 支持鼠标点击定位
  4. 支持函数列表功能(F9打开或关闭)
  5. 支持多文件打开功能(F5)
  6. 可使用ctrl+N 补全函数以及结构体成员
  7. 自动整理代码格式:
  8. 使用鼠标选中代码,按下“=”号键可自动规整代码
  9. 支持vim快捷键.pdf中的快捷键。
  10. 插件的特殊用法,参看《vim快捷键.pdf》

4、Linux下编译器
        牛羊杀好了,需要怎么才能得到我们想要的hello world呢?
        机器可不认识你什么 int char printf,机器只认识0110101011
        所以我们需要请出我们的翻译大神——gcc,来进行完成这个伟大而又艰巨的翻译使命——从文本到二进制

a、编译器的基本概念:
编译器是将易于编写、阅读和维护的高级计算机语言翻译为计算机能解读、运行的低级机器语言的程序。
        GNU项目中的一个子项目GCC(GNU Compiler Collection)是一个编译器套装
        GCC最初用于编译C语言,随着项目的发展GCC已经成为了能够编译C、C++、Java、Ada、fortran、Object C、Object C++、Go语言的编译器大家族。
        gcc作为真实的编译器和链接器的入口——它会在需要的时候调用其它组件(预处理器、汇编器、链接器),并且会传一些额外的参数给编译器和连接器。
        
b、输入文件的类型和传给gcc的参数决定了gcc调用哪些组件。
gcc识别的文件扩展名如下:
.c C语言文件
.i 预处理后的C语言文件
.C、.cc、.cp、.cpp、.c++、.cxx C++语言文件
.ii 预处理后的C++语言文件
.S 汇编文件
.s 预处理后的汇编文件
.o 编译后的目标文件
.a 目标文件的静态链接库(链接时使用)
.so 目标文件的动态链接库(链接、运行时使用)

c、gcc、g++编译选项
-o file        指定生成的输出文件名为file
-E             只进行预处理
-S             只进行预处理和编译
-c             只进行预处理、编译和汇编
-Wall        生成所有级别的警告信息
-w            关闭所有警告,建议不使用此选项

d、gcc常用编译应用实例:
例1:分步进行

gcc -E hello.c -o hello.i    1、预处理

gcc -S hello.i -o hello.s    2、编译

gcc -c hello.s -o hello.o    3、汇编

gcc    hello.o -o hello_elf  4、链接


例2: 一步到位

gcc    hello.c -o hello_elf


5、Linux下调试器使用
        牛肉做好了,但是味道不太好,少了盐还是缺了糖?
         好吧,让我们一起摇摆,调一下味道——GDB
        查找错误的神器!

a、概述:
GNU工具集中的调试器是gdb,该程序是一个交互式工具,工作在字符模式。
除gdb外,linux下比较有名的调试器还有xxgdb, ddd, kgdb, ups。

b、常用命令:
1. l (list)       列出程序清单
2. r (run)      运行程序
3. b(breakpoint) 设置断点,格式: b  [行号/函数名]
4. info b      查看断点信息
5. clear       [行号] , 清除断点
6. c (continue) 继续运行程序
7. s (step)   单步运行,step into
8. n (next)   单步运行,step over
9. finish       跳出函数,   step out
10. print      变量/表达式 , 显示变量或表达式的值
11. display  变量/表达式 ,每次程序停止运行是都显示变量或表达式的值
12.undisplay 取消显示变量

c、例子:




0 0