学习笔记1

第一次学习笔记

第一章

 

知识点

 

1、系统编程:内存空间用来存放程序和数据,所有的程序必须在内存空间中才能运行。用来容纳操作系统的内存空间叫做系统空间,容纳应用程序的内存空间叫做用户空间。操作系统实现内核提供服务以便使系统程序可以直接访问系统资 

2、目的:

1)实现Unix系统编程中3个重要的方面:通信、协作、网络访问

2)灵活应用动态数据结构(包括C结构、指针、链表和链树)

3)理解进程概念和进程管理  

4)强化编程背景知识,并通过用户级线程练习并发编程  

5)实现支持并发任务的间隔定时器  

6)使用Linux信号和管道来实现一个进程间通信机制

7)让学生实现一个与Linux完全兼容的完整EXT2文件系统   

8)可以使用CGI编程来实现一个网络服务器。

3、unix系统和Linux系统里很少会使用到鼠标,大部分情况下均可使用指令组进行实现,比如ctrl+Alt+t实现快捷指令等等,减少了对鼠标的依赖。

4、文件类型

1)目录文件

2)非目录文件:包括常规文件和特殊文件。特殊文件包括字符特殊文件和块特殊文件等。

3)符号链接文件

5、Unix/Linux命令

 

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

unzip file.zip:解压.zip文件

6、Ubuntu Linux系统管理:

(1)用户账户:当用户使用登录名和密码登录后,登录进程将通过获取用户的gid和uid来转换成用户进程,并将目录更改为用户的homeDir,然后执行列出的initialProgram,该程序通常为命令解释程序sh。

2)sudo命令:在Ubuntu里,sudo(“超级用户执行”)允许用户以另一个用户(通常是超级用户)的身份执行命令,为确保用户能够发出sudo,只需在sudoers文件中添加一行:username ALL(ALL) ALL。

 

第二章

一、知识点归纳

 

1、文本编辑器

(1)vim

i 插入模式,插入文本     退出插入模式:esc

a 插入模式,追加文本

:w 保存文件

:q 退出vim

:wq 保存并退出vim

:q! 不保存更改,强制退出

 

 

(2)Gedit

 

 

 

 

使用与vim类似,只是快捷键与页面有所区别

(3)emacs

 

 

 

2、程序开发

(1)创建源文件

(2)gcc把源文件转换成二进制可执行文件

(3)gcc:c源文件--汇编代码文件--目标代码(.c--.s--.o)

(4)链接:静态链接

           动态链接:优点:减少每个a.out文件的大小;许多执行程序可在内存中共享相同的库函数;修改库函数不需要重新编译源文件。

3、a.out

(1)文件头:包含a.out文件的加载信息和大小

Tsize:代码段大小

Dsize:初始化全局变量和初始化静态数据的数据段大小

Bsize:未初始化全局变量和初始化静态数据的bss段大小

Total_size:加载的a.out文件总大小

(2)代码段(正文段):程序的可执行代码

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

(4)符号段(可选)

程序终止:正常终止和异常终止

4、C语言中函数调用

1)32位gcc中的运行时堆栈使用情况

2)Longjump

3)64位gcc中的运行时堆栈使用情况

5、C程序与汇编代码链接

(1)用汇编代码编程

(2)用汇编语言实现函数

(3)从汇编中调用C函数

6、链接库

(1)静态链接库

 

 

(2)动态链接库

 

 

7、makefile

makefile 的本质是一个文件,需要配合make指令进行自动化编译。

make是一个命令工具,用来解释makefile文件中的代码,从而实现自动化编译。编译使用的编译器本质上还是GCC。

makefile文件中定义了一系列的规则来指定, 哪些文件需要先编译, 哪些文件需要后编译, 哪些文件需要重新编译, 甚至于进行更复杂的功能操作。

格式:一个make文件由一系列目标项、依赖项和规则组成。

(1)makefile格式

目标项、依赖项、规则

(2)make程序

sh命令:gcc -o myt main.c mysum.c

(3)makefile变量

$@ 当前目标名

$< 第一个依赖项名

$^ 所有依赖项名

$* 不包含扩展名的当前依赖项名

$? 比当前目标更新的依赖项列表

8、GDB调试工具

emacs IDE中使用GDB

(1)源代码

makefile:t: t.c

                  Gcc -g -o t t.c

(2)编译源代码

Tools菜单--Compile

(3)启动GDB

Tools--Debugger

(4)多窗口GDB

Gud-t 用户命令和GDB消息的GDB缓冲区

t.c 显示执行进度的程序源代码

栈帧 显示函数调用序列的栈帧

本地寄存器 显示当前执行函数中的局部变量

输入/输出 程序I/O

断点 显示当前断点设置

(5)附加GDB命令

·清除断点

clear line# 清除line#的断点

clear name 清除函数(名字为name)中的断点

·更改变量值

set var a = 100

set var b = 200

·监视变量值改变

watch c 监视变量c值改变;每当c的值变化时,将显示其旧值和新值

·回溯追踪

bt stackFrame# 回溯追踪栈帧

9、C语言中函数调用、结构体、指针等内容的复习

10、数据结构中各种链表和二叉树的操作复习

 

苏格拉底挑战

 

 

 

 

 

 

 

 

 

 

问题与解决

 

 

上网查找后发现是wsl未安装gcc,所以无法运行gcc口令。

 

 

 

myt:: command not found

这一命令问题未解决,与课本命令相同却出现错误。

 

 

 

 

 

参考:https://www.cnblogs.com/zhaoziyu/p/15267405.html

https://blog.csdn.net/weixin_45160175/article/details/132025478

https://blog.csdn.net/qq_41685265/article/details/104296344

posted @ 2023-09-10 19:44  窦豆  阅读(37)  评论(0)    收藏  举报