第一次学习笔记
第一章
知识点
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
标签:文件,gcc,makefile,用户,笔记,学习,编译,GDB From: https://www.cnblogs.com/1104dd/p/17691752.html