C语言后续笔记

GPL =General  Public License对自由软件的条款

Ubuntu核心理念—“人道待人

Enterprise Open Source and Linux | Ubuntu  Ubuntu官网

The Linux Kernel Archives   看Linux内核的网址

默认终端:Gnome –terminal

“软件包”管理机制----Deb软件包:将应用程序的二进制文件、配置文档、man/info帮助页面等文件合并打包在一个文件中,用户使用软件包管理器直接操作软件包,完成获取、安装、卸载、查询等操作。

APT软件包管理器:检查和修复软件包依赖关系,利用Internet网络帮助用户主动获取软件包

二进制软件包(deb):包含可执行文件、库文件、配置文件、man/info页面、版权声明和其它文档。

源码包(deb-src):包含软件源代码、版本修改说明、构建指令以及编译工具等。先由tar工具归档为.tar.gz文件,然后再打包成.dsc文件。

软件包的命名遵循以下约定:软件包名称_软件版本_修订版本_体系架构

dpkg相关命令

dpkg –i 安装一个在本地文件系统上存在的Debian软件包

dpkg –r 移除一个已经安装的软件包

dpkg –P 移除已安装软件包及配置文件

dpkg –L 列出安装的软件包清单

dpkg –s 显示出软件包的安装状态

APT工作原理

Ubuntu采用集中式的软件仓库机制,将各式各样的软件包分门别类地存放在软件仓库中,进行有效地组织和管理。然后,将软件仓库至于许许多多的镜像服务器中,并保持基本一致。因此,对于用户这些镜像服务器就是他们的软件源(reposity)

在Ubuntu系统中,使用软件源配置文件/etc/apt/sources.list列出最适合访问的镜像站点地址。

管理软件包

Apt-get subcommands [-d|-f|-m|-q|--purge|--reinstall|-b|-s|-y|-u|-h|-v] pkg

Update 下载更新软件包列表信息

Upgrade 将系统中所有软件包升级到最新的版本

Install 下载所需软件包并进行安装配置

Remove 卸载软件包

Autoremove 将不满足依赖关系的软件包自动卸载

Source 下载源码包

Build-dep 为源码包构建所需的编译环境

Dist-upgrade 发布版升级

Dselect-upgrade 根据dselect的选择来进行软件包升级

Clean 删除缓存区中所有已下载的包文件

Autoclean 删除缓存区中老版本的已下载的包文件

Check 检查系统中依赖关系的完整性

-f 修复系统中存在的软件包一栏问题

--purge 与remove子命令一起使用,完全卸载软件包

apt-cache show 命令获取指定软件包的详细信息

apt-cache policy 可以获取软件包当前的安装状态。

Shell命令行解释器

Home目录 /home/linux

Bash除了在命令编辑功能上比sh有很大改进外,还增加了特有功能极大地方便了用户在Shell命令行上的操作。

连续按两下TAB键或ESC键,用于命令补齐;按下一次TAB键,用于文件名补齐。

输入\输出重定向(常见的要熟练)

输入\输出重定向是改变shell命令或是程序默认的标准输入/输出目标,重新定向到新的目标。

命令替换是将一个命令的输出作为另一个命令的参数。

Man

Name:命令的名称;SYNOPSIS:命令的语法格式;DESCRIPTION:命令的一般描述以及用途;options:描述命令所有的参数或选项;SEE ALSO:列出联机帮助页中与该命令直接或功能相近的命令;BUGS:解释命令或其输出中存在的任何可能存在的缺陷;EXAMPLES:普通的用法实例;AUTHORS:联机帮助页以及命令的作者。·

su 用于临时改变用户身份 su – 切换到超级用户

echo用于标准输出(在终端)

data 显示日期

clear 清屏(ctrl+l)

df 查看磁盘空间的使用情况

du 列出目录和文件所使用的磁盘块数

/etc/passwd文件是系统能够识别的用户清单。

/etc/group文件 包含了UNIX组的名称和每个组中成员列表。

Addurer 添加用户名

/etc/adduser.conf. adduser配置文件

SKEL模板

添加新用户的过程

系统

编辑passwd和shadow文件,定义用户账号

设置一个初始口令

创建用户主目录,用chown和chmod命令改变主目录的属主和属性。

为用户所进行的步骤

将默认的启动文件复制到用户主目录下

设置用户的邮件主目录并建立邮件别名

Usermod修改用户属名

Deluser 删除用户

Addgroup 添加用户组

Delgroup 删除用户组

程序的一次执行就是一个进程

ps显示进程(process)的动态

top实时监测(q键退出)

使用kill命令终止进程(kill [-signal] PID)signal是信号,PID是进程号

Linux文件系统:用于组织和管理计算机存储设备上的大量文件,并提供用户交互接口。既可以使用界面友好的Nautuius图形文件管理器,也可以使用功能强大的shell文件系统管理工具

Linux分区的命名方式:字母和数字相结合

Linux文件系统结构;(自顶向下的查询方法)所有存储设备作为这棵树的一个子目录。存取文件时只需确定目录就可以了,无需考虑物理存储位置。

在linux中,将所有的硬件都视为文件来处理

File命令。判定一个文件的类型

硬链接是利用linux中为每个文件分配的物理编号——inode建立链接

软连接是利用文件的路径名建立链接

文件压缩和归档(和window一样)

gzip和gunzip命令压缩和解压文件

如何配置网络

Ifconfig

Vi  /etc/network/interfaces

Vi /etc/resolv.conf

Vi /etc/rc.local

Sudo /etc/init.d/networking restart

Ping www.baidu.com

Shell脚本语言是解释型语言。本质:shell命令的有序集合

Esc+o是vi的换行。

Sh文件的头文件#!/bin/bash命令置换一定要有输出 修改权限:chmod 740 文件名

Shell中有四种变量:

用户自定义变量(大写);

通常使用全大写变量,方便识别。变量的调用:在变量前面加$。Linux Shell/bash从右向左赋值。使用unset命令删除变量的赋值

位置变量即命令行参数;

$0与键入的命令行一样,包含脚本文件名

$1,$2……$9分别包含第一个到第九个命令行参数

$#包含命令行参数的个数

$@包含所有命令行参数:“$1,$2,.......$9”

$?包含前一个命令的退出状态

$*包含所有命令行参数:“$1,$2,……$9”

$$ 包含正在执行进程的ID号

预定义变量;

环境变量

HOME:/etc/passwd文件中列出的用户主目录

IFS:Internal Field Separator,默认为空格,tab及换行符

PATH:shell搜索路径

PS1,PS2:默认提示符($)及换行提示符(>)

TERM:终端类型,常用的有vt100,ansi,vt200,xterm等。

Shell程序由零或多条shell语句构成。Shell语句包括三类:说明性语句、功能性语句和结构性语句。

说明性语句:

以#号开始到该行结束,不被解释执行

功能性语句:

任意的shell命令、用户程序或其它shell程序

Read;expr(\*)

结构性语句:

主要根据程序的运行状态、输入数据、变量的取值、控制信号以及运行时间等因素来控制程序的运行流程

条件测试语句【if then fi】、多路分支语句【case in esac】、循环语句【for、while】、循环控制语句。

GNU工具

编译工具:把一个源程序编译为一个可执行程序。

调试工具:能对执行程序进行源码或汇编级调试。

软件工程工具:用于协助多人开发或大型软件项目的管理,如make,CVS,Subvision

其他工具:用于把多个目标文件链接成可执行文件的链接器,或者用作格式转换的工具。

GCC最基本的用法:gcc [options] [filenames]

-c,只编译,不连接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于汇编不包含主程序的子程序文件。

-o output_filename,确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out。

-g,产生符号调试工具所必要的符号资讯,要想对源代码进行调试,我们就必须加入这个选项。

-O,对成进行优化编译,连接,采用这个选项,整个源代码就会在编译,连接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是,编译、连接的速度就相应地要慢一点。

-O2,比-O更好的优化编译、连接,当然整个编译、连接过程会更慢。

-l dirname,将dirname所指出的目录加入到程序头文件目录列表中,是在预编译过程中使用的参数。

-L dirname,将dirname所指出的目录加入到程序函数档案库文件目录列表中,实在链接过程中使用的参数。

GCC的错误类型及对策:第一类:c语法错误;第二类:头文件错误;第三类:档案库错误

第四类:未定义符号

GCC的编译流程分为四个步骤:

1.预处理(pro-processing)

2.编译(Compiling)

3.汇编(Assembling)

4.链接(Linking )

GDB调试

gcc –g test.c –o test

gdb test

共用体的概念:在C语言中,不同数据类型的数据可以使用共同的存储区域,这种数据构造类型称为共用体(在定义、说明和使用形式上与结构体相似,两者本质上的不同仅在于使用内存的方式上)

C/C++定义了四个内存空间:

代码区/全局变量与静态变量区/局部变量区即栈区/动态存储区、即堆区。

静态存储分配:通常定义变量,编译器在编译时都可以根据该变量的类型知道所需内存空间的大小,从而系统在适当的时候为他们分配确定的存储空间。

在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些储存单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。

动态存储分配:有些操作对象只有在程序运行时才能确定,这样编译器在编译时就无法为他们预定存储空间,只有在程序运行时,系统根据运行的要求进行内存分配。

所有动态存储分配都在堆区进行。

从堆上分配,亦称动态内存分配。程序在运行的时候用malloc申请任意多少的内存,程序员在即负责在何时用free释放内存。内存生存期灵活,但是容易出问题。

堆内存的分配与释放:

当程序运行到需要一个动态分配的变量或对象时,必须向系统申请取得堆中的一块所需大小的存储空间,用于该变量或对象。当不再使用该变量或对象时,也就是它的生命结束时,要显式释放它所占用的存储空间,这样系统就能对该堆空间进行再次分配,做到重复使用有限资源。

堆区是不会自动在分配时做初始化的(包括清零),所以必须用初始化式(initializer)来显式初始化。

Makefile是make读入的唯一配置文件

由make工具创建的目标体(target),通常是目标文件或可执行文件

要创建的目标体所依赖的文件(dependency_file)

创建每个目标体时需要运行的命令(commamd)

注意:命令行前面必须是一个“TAB键”,否则编译错误为:***missing separator. Stop

创建变量的目的:用来代替一个文本字符串:

1.系列文件的名字

2.传递给编译器的参数

3.需要运行的程序

4.需要查找源代码的目录

5.你需要输出信息的目录

6.你想做的其他事                                                            

隐含规则1:编译C程序的隐含规则

.o的目标依赖目标会自动推导为.c,并且其生成命令是“$(cc)-c $(CPPFLAGS)$(CFLAGS)

隐含规则2:链接Object文件的隐含规则

目标依赖于.o,通过运行c的编译器来运行链接程序生成(一般是 ld),其生成命令是:$(CC)$(LDFLAGS) .o $(LOADLIBES) $(LDLIBS)。这个规则对于只有一个源文件的工程有效,同时也对多个Object文件(由不同的源文件生成)也有效。例如如下规则:

X:x.o y.o z.o

并且x.c、y.c、z.c都存在时,隐含规则将执行如下命令:

cc –c x.c –o x.o

cc –c y.c –o y.p

cc –c z.c –o z.o

cc x.o y.o z.o –o x

如果没有一个源文件

你可能感兴趣的:(c语言)