第一次读书笔记

总结:

  • 第一二单元总的来说是在描述Linux系统中c语言的重要性,以及在其中的一些使用技巧。其中C语言数据结构中的数据结构,就是Linux文件系统构建起来的基础。第一章主要包含了一些Linux系统的基础命令操作,而后第二章更多的讲的是Linux系统下c语言的使用,C语言程序在系统中的编译过程,它是如何执行、如何结束的。

其他知识点

  1. 系统软件运行在系统底层,与内核和系统核心库进行交互。

  2. 常见的系统软件包括Shell、文本编辑器、编译器、调试器、核心工具(GNU core utilities)以及系统守护进程。网络服务、Web服务和数据库也属于系统软件范围。(基于内核和C库实现)
    3.系统编程是编写一切软件的灵魂。

  3. Linux是类UNIX的现代操作系统,由Linus Toralds和全球的程序员一起完成的。两者的系统编程核心是一样的,但是Linux支持更多的系统调用,支持不同的行为、拥有不同的特性。

  4. 系统编程和应用编程之前存在着一定的区别;系统编程的程序员需要对其工作的硬件和操作系统都有了解。系统程序主要与内核和系统库打交道,应用程序需要与更高层次的库进行交互,这些库将硬件和操作系统的细节抽象封装起来增强系统的可移植性、不同版本之间的兼容性以及可以构建更易于使用、功能更强大的高级工具箱。

  5. LinU型系统编程三大基石:
    1、系统调用
    2、C库
    3、C编译器

点击查看代码
1.系统调用
    系统调用(syscall)是从操作系统请求一些服务或资源,是用户空间如文本编辑器、游戏等向系统内核发起的函数调用。(read()、write()、get_thread_area()、set_tid_address())
    Linux实现的系统调用远远小于其他内核。
    调用系统调用。位于用户空间的应用程序无法直接访问内核空间。内核需要有一种机制,用户空间需要执行系统调用时,通过该机制通知内核
2.C库
			UNIX应用程序的核心。现代Linux系统中,C库由GNUlibc提供,简称glibc;glibc中除了标准C库外,还提供系统调用封装你、线程支持和基本应用工具。
3.C编译器
			在Linux中,标准C编译器是由GNU编译器工具集(GCC,表示GNU C编译器;此外gcc还表示C编译器二进制程序)提供的。
4.C++

6. API和ABI(应用程序编程接口和应用程序二进制接口)两者独立都影响可移植性。
点击查看代码
API:定义了软件模块之间在源代码层交互的接口。理解为一个软件模块如何调用另一个软件模块。API仅仅是定义接口,真正提供API的软件模块称为API实现。保证源码兼容。
ABI、:定义了两个软件模块在特定体系结构上的二进制接口。定义了应用内部怎么交互,应用与内核怎么交互、以及怎么与库交互。保证二进制兼容。(在同一个ABI中,目标代码可以在任何系统上正常工作,而不需要重新编译)ABI主要关注调用约定、字节序、寄存器使用、系统调用、链接、库的行为以及二进制目标格式。ABI是操作系统和体系结构共同提供的功能。
* Unix/Linux 系统编程

文件路径名
绝对路径和相对路径。绝对路径从根目录出发(有/开头的文件路径),相对路径从当前位置出发。

Linux常见命令

简单命令操作
Ls

Touch

Cat

Cp

Zip

Man 2 open

用户登录系统时,系统会验证/etc/password和/etc/shadow两个文件

添加新用户

第二章 编程背景
1、文本编辑器VIM

实践

2.gedit编辑器(ubantu20.04初始默认文本编辑器)

3.Emacs编辑器

程序开发


T1.c

执行命令直接生成a.out

静态链接与动态链接:静态链接将a.out程序中所需要的所有数据和调用文件全写入a.out之中,会使得文件完整独立,但文件体积会相当的大。动态链接的方式,减小了a.out文件大小,减少了没有必要的重复编译。

可执行文件格式(linux中文件是否可置信,完全依照它本身在系统中被赋予的权限,但执行是否会有正确结果,还需要看文件的内容以及文件格式)

a.out文件内容:1文件头(加载信息和大小)、2代码段、3数据段、4符号表

程序启动及执行过程

程序结束
正常结束/异常结束

Longjump:C语言中长距离函数参数传递使用

链接库
静态链接和动态链接

Make,有选择的执行编译链接

GDB调试工具(交互式调试工具)

如EMACS、codeblocks

posted @ 2022-09-04 21:17  岳华  阅读(14)  评论(0编辑  收藏  举报