Linux
ʀᴇʟɪᴇʏ
这个作者很懒,什么都没留下…
展开
-
fork函数嵌套在for循环
当printf以\n结尾时会打印14个。因为程序遇到“\n”,或是EOF,或是缓冲区满,或是文件描述符关闭,或是主动flush,或是程序退出,就会。因为在fork()的调用中,整个父进程空间会原模原样地复制到子进程中,包括缓冲区。会打印出 24 个 i 而不是 14 个。原创 2023-06-17 14:56:30 · 199 阅读 · 0 评论 -
查看网络相关信息的命令
p 显示正在使用socket的程序的名称。-n 直接使用IP地址,而不通过域名服务器。-a 所有的socket。查看网络相关信息的命令。原创 2023-04-02 16:33:54 · 112 阅读 · 0 评论 -
Linux进程控制
exit函数为标准C库函数,会调用_exit函数。原创 2023-03-24 23:50:48 · 214 阅读 · 0 评论 -
GDB多进程调试
默认为 on,表示调试当前进程的时候,其它的进程继续运行,如果为 off,调试当前进程的时候,其它进程被 GDB 挂起。使用 GDB 调试的时候,GDB 默认只能跟踪一个进程,可以在 fork 函数调用之前,通。过指令设置 GDB 调试工具跟踪父进程或者是跟踪子进程,默认跟踪父进程。使进程脱离 GDB 调试:detach inferiors id。查看调试的进程:info inferiors。切换当前调试的进程:inferior id。原创 2023-03-24 14:25:57 · 117 阅读 · 0 评论 -
进程创建fork
内核此时并不复制整个进程的地址空间,而是让父子进程共享同一个地址空间。也就是说,资源的复制是在需要写入的时候才会进行,在此之前,只有以只读方式共享。注意:fork之后父子进程共享文件,fork产生的子进程与父进程相同的文件文件描述符指向相同的文件表,引用计数增加,共享文件偏移指针。系统允许一个进程创建新进程,新进程即为子进程,子进程还可以创建新的子进程,形成。1. 当前系统的进程数已经达到了系统规定的上限,这时 errno 的值被设置。2. 系统内存不足,这时 errno 的值被设置为 ENOMEM。原创 2023-03-24 14:22:50 · 64 阅读 · 0 评论 -
进程相关命令
每个进程都由进程号来标识,其类型为 pid_t(整型),进程号的范围:0~32767。任何进程(除 init 进程)都是由另一个进程创建,该进程称为被创建进程的父进程,进程组是一个或多个进程的集合。他们之间相互关联,进程组可以接收同一终端的各。种信号,关联的进程有一个进程组号(PGID)。默认情况下,当前的进程号会当做当。进程号总是唯一的,但可以重用。当一个进程终止后,其进程号就可以再次使用。对应的进程号称为父进程号(PPID)。3.实时显示进程动态。原创 2023-03-23 22:38:41 · 304 阅读 · 0 评论 -
进程控制块PCB
为了管理进程,内核必须对每个进程所做的事情进行清楚的描述。内核为每个进程分配一个 PCB(Processing Control Block)进程控制块,维护进程相关的信息,Linux 内核的进程控制块是 task_struct 结构体。在 /usr/src/linux-headers-xxx/include/linux/sched.h 文件中可以查看 struct task_struct 结构体定义。进程的状态:有就绪、运行、挂起、停止等状态。进程切换时需要保存和恢复的一些。:系统中每个进程有唯一的。原创 2023-03-23 21:31:56 · 221 阅读 · 0 评论 -
GDB详解
GDB 是由GNU软件系统社区提供的调试工具,同GCC配套组成了一套完整的开发环境,GDB是Linux和许多类Unix系统中的标准开发环境。通常,在为调试而编译时,我们会关掉编译器的优化选项(‘-o’),并打开调试选项('-g')。另外,'-Wall'在尽量不影响程序行为的情况下选项打开所有warningLinux命令为:gcc -g -Wall program.c -o program其中,`-g` 选项的作用是在可执行文件中加入源代码的信息,比如可执行文件中第几条机。原创 2023-03-21 20:00:37 · 425 阅读 · 0 评论 -
Makefile文件的编写
PHONY表示clean程序不会被生成,这样保证了可以重复执行clean。在命令行中执行make clean可以删除,执行make又可以生成。原创 2023-03-20 23:54:28 · 51 阅读 · 0 评论 -
动态库的制作与使用
对于elf格式的可执行程序,是由ld-linux.so来完成的,它先后搜索elf文件的DT_RPATH段 --> 环境遍历LD_LIBRARY_PATH --> /etc/ld.so.cache文件列表 --> /lib/, /usr/lib目录找到库文件后将其载入内存。对于动态库,GCC进行链接时,动态库的代码不会被打包到可执行程序中。当系统加载可执行代码时,能够知道其所依赖的库的名字,但是还需要知道绝对路径。不建议在动态库文件放在/lib/, /usr/lib目录,因为其中有很多系统库函数。原创 2023-03-20 15:41:20 · 406 阅读 · 0 评论 -
静态库的制作与使用
生成可执行文件命令为 gcc main.c -o app -I ./include/ -L ./lib/ -l suanshu。上述命令即可生成名为app的可执行文件。静态库在链接时被添加到程序中。原创 2023-03-19 16:50:51 · 359 阅读 · 0 评论 -
g++ 和 gcc 的区别
gcc和g++都是GNU的一个编译器 后缀为.c的,gcc会把它当作C程序,g++会当作C++程序;后缀为.cpp的,两者都会认为是C++程序,C++的语法规则更加严谨一原创 2023-03-19 15:39:54 · 119 阅读 · 0 评论 -
GCC 基本使用
预处理命令:gcc test.c -E -o test.i。编译命令:gcc test.i -S -o test.s。汇编命令:gcc test.s -c -o test.o。预处理作业:展开头文件、替换宏、删掉注释等。原创 2023-03-19 14:53:53 · 243 阅读 · 0 评论