《Unix/Linux系统编程》第一、二章学习笔记

第一章 引言

1、Unix&Linux简介及历史版本

2、虚拟机安装(VMware Workstation Pro)

3、Ubuntu和windows差别对比(个人总结,可能有误)

(1)从安全性角度而言,Ubuntu的超级用户root被锁定,而Windows很容易就启用超级用户。Ubuntu 很少成为病毒和恶意软件的目标。(sudo命令)。

(2)Ubuntu拥有远超Windows的个性化配置选择。

(3)Windows中数据被分散储存在多个地方,Ubuntu则把所有信息都储存在用户主目录下,方便备份和迁移数据。

4、Unix/Linux常用命令

ls:ls dirname:列出CWD或目录的内容。

cd dirname:更改目录。

pwd:打印CWD的绝对路径名。

touch filename:更改文件名时间戳(如果文件不存在,则创建文件)。

cat filename:显示文件内容。

cp src dest:复制文件

mv src dest:移动或重命名文件。

mkdir dirname:创建目录。

rmdir dirname:移除(空)目录。

rm filename:移除或删除文件。

ln oldfile newfile:在文件之间创建链接。

find:搜索文件。

grep:搜索文件中包含模式的行。

ssh:登录到远程主机。

gzip filename:将文件压缩为.gz文件。

tar -zcvf file.tgz.:从当前目录创建压缩tar文件。

tar -zxvf file.tgz.:从.tgz文件中解压文件。

man:显示在线手册页。

zip file.zip filenames:将文件压缩为.zip文件。

unzip file.zip:解压.zip文件。

ln :创建链接文件

more、less:分页显示文本文件内容

head、tail : 显示文件头、尾内容

Ctrl+alt+t:打开命令行

ctrl+alt+F1:命令行全屏模式

5、Ubuntu Linux的系统管理

 用户账户信息保存在/etc/passwd文件中,该文件归超级用户所有,但任何人都可以读取。在表单的/etc/passwd文件中,每个用户都有一个对应的记录行:loginName:x:gid:uid:usefInfo:homeDir:initalProgram。包含加密的用户密码,后面是可选的过期限制信息,如过期日期和时间等。当用户尝试使用登录名和密码登录时,Linux将检查/etc/passwd文件和/etc/shadow文件,以验证用户的身份。

添加用户命令sudo adduser username;

sudo命令,即超级用户执行,可提升用户权限至超级用户。

第二章 编程背景

1、Linux中的文本编辑器

(1)Vim

vim是Linux的标准内置编辑器。

vim有三种不同的操作模式,分别是命令模式、插入模式和末行模式。
命令模式:vim启动时,处于默认的命令模式。大多数键表示特殊命令。如操纵光标的上下左右分别为kjhl。

插入模式:当要输入文本进行编辑,必须输入i或a命令将vim切换到插入模式。其中i为插入文本,a命令为追加文本。要退出插入模式,按ESC键一次或多次即可。
末行模式:在命令模式下,输入“:”进入末行模式,将文本文件保存为文件或退出vim,具体有以下四个命令:

:w:写入(保存)文件
:q:退出vim
:wq:保存并退出
:q!:不保存更改,强制退出

(2)gedit&emacs

Gedit是GNOME桌面环境默认的文本编辑器。

Emacs则可在多个不同的平台下运行。

两者都属于所见即所得(WYSIWYG)编辑器,相对vim,不需要模式切换。

2、程序开发

(1)程序开发步骤

<1>创建源文件。

<2>用gcc将源文件转换为二进制可执行文件。文件名默认为a.out。

a.out文件的内容包含:

文件头:包含文件加载信息和大小,其中

tsize=代码段大小;

dsize=包含初始化全局变量和初始化静态局部变量的数据段大小;

bsize=包含未初始化全局变量和未初始化静态局部变量的bss段大小;

total_size=加载的a.out文件的总大小。

代码段:正文段,包含程序的可执行代码,调用main函数。

数据段:包含初始化全局变量和初始化静态数据。

符号段(可选):仅为运行调试所需。

(2)静态与动态链接

使用静态链接,则链接器将所有必要的库函数代码与数据纳入a.out文件中;

使用动态链接,则只将调用以指令形式记录。

相对比,静态链接的文件完整、独立,但偏大;动态链接文件偏小,且多个文件可共享库函数。在需要修改库函数时,动态链接也更方便。

(3)程序的执行与终止

程序的执行分为三步:

读取a.out文件头,确认所需的总内存和堆栈空间大小;

sh从总大小中分配一个内存区给执行映像;

sh放弃旧映像,开始执行新映像。

程序的终止分为两种:

<1>正常终止(执行成功)

<2>异常终止(遇到错误)

 

问题与解决:

1、linux c/c++ a.out的由来

a.out是”assembler output”的缩写格式,代表汇编程序输出。在较早版本的类unix系统中,a.out是一种输出格式,用于可执行文件,目标文件和共享库。早期的 PDP-7系统上没有链接器,程序的创建过程是先把所有源文件连接成一个文件,然后进行汇编,产生的汇编程序保存在a.out中。这样a.out是名副其实的汇编输出,但到PDP-11之后,人们为其编写了链接器,程序的创建是先编译然后链接输出保存到a.out中,这时a.out其实已经是链接输出了,但输出的可执行文件仍然延续这个命名习惯。

2、gcc的完整过程(如图)

 

 

 

3、gcc和g++的区别

1. gcc是GCC中的c编译器

g++是GCC中的c++编译器

2. 对于后缀为.c的文件,gcc当成c文件处理,而g++当成c++处理

对于后缀为.cpp的文件,两者都当成.cpp文件处理

3. 在编译阶段,g++会自动链接STL库,而gcc必须要加一个参数-lstdc++

4. gcc在编译c文件时,可用的预定义宏是比较少的

 

posted @ 2021-09-26 00:00  20191309刘嘉祺  阅读(57)  评论(0编辑  收藏  举报