![](https://img-blog.csdnimg.cn/c1e26096d4594e4a87907960072c2787.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
系统编程
文章平均质量分 93
主要介绍liinux 下的系统编程的相关知识
cat_fish_rain
无闻之辰黑暗凝,万籁寂静月光稀。 待到黎明破晓至,曙光照耀大地归。
展开
-
linux 系统编程复习07-信号
进程A给进程B发送信号,进程B收到信号之前执行自己的代码,收到信号后,不管执行到程序的什么位置,都要暂停运行,去处理信号,处理完毕后再继续执行。Linux内核的进程控制块PCB是一个结构体,task_struct, 除了包含进程id,状态,工作目录,用户id,组id,文件描述符表,还包含了信号相关的信息,主要指。阻塞信号集是当前进程要阻塞的信号的集合,未决信号集是当前进程中还处于未决状态的信号的集合,这两个集合存储在内核的PCB中。若是信号从阻塞信号集中解除阻塞,则该信号会被处理,并从未决信号集中去除。原创 2023-10-29 16:33:54 · 169 阅读 · 0 评论 -
linux常用基础命令与文件结构汇总01
linux常见用法一文搞定。原创 2023-08-21 14:21:48 · 171 阅读 · 0 评论 -
linux系统03--makefile文件,gdb 以及文件描述符
makefile文件中定义了一系列的规则来指定, 哪些文件需要先编译, 哪些文件需要后编译, 哪些文件需要重新编译, 甚至于进行更复杂的功能操作, 因为makefile就像一个Shell脚本一样, 其中也可以执行操作系统的命令. makefile带来的好处就是——“自动化编译”, 一旦写好, 只需要一个make命令, 整个工程完全自动编译, 极大的提高了软件开发的效率.GDB 可以打印出所调试程序的源代码, 当然, 在程序编译时一定要加上-g的参数, 把源程序信息编译到执行文件中。不然就看不到源程序了。原创 2023-08-17 19:12:20 · 248 阅读 · 0 评论 -
linux 系统中vi 编辑器和库的制作和使用02
动态库在程序运行时才被载入, 也解决了静态库对程序的更新、部署和发布会带来麻烦. 用户只需要更新动态库即可, 增量更新. 为什么需要动态库, 其实也是静态库的特点导致.先按ctrl+v进入列模式, 按hjkl移动选定某列,按I或者shift+i向前插入, 然后插入字符, 最后按两次esc。由于由静态库生成的可执行文件是把静态库加载到了其内部, 所以静态库生成的可执行文件一般会比动态库大.不同的应用程序如果调用相同的库, 那么在内存里只需要有一份该共享库的拷贝, 规避了空间浪费问题.原创 2023-08-15 20:46:14 · 2166 阅读 · 0 评论 -
linux系统编程重点复习05--进程的控制
有的时候需要在一个进程里面执行其他的命令或者是用户自定义的应用程序,此时就用到了exec函数族当中的函数。使用方法一般都是在父进程里面调用fork创建处子进程,然后在子进程里面调用exec函数。4.1.1 execl函数函数原型:参数介绍:path:要执行的程序的绝对路径变参arg:要执行的程序的需要的参数arg:占位,通常写应用程序的名字arg后面的命令的参数参数写完之后NULL返回值:若是成功,则不返回,不会再执行exec函数后面的代码;若是失败,会执行exe。原创 2023-08-02 00:00:00 · 250 阅读 · 0 评论 -
linux系统编程重点复习09--线程同步
第二种 线程A拥有A锁,请求获得B锁;上述代码中,生产者线程调用pthread_cond_signal函数会使消费者线程在pthread_cond_wait处解除阻塞。死锁并不是linux提供给用户的一种使用方法,而是由于用户使用互斥锁不当引起的一种现象。练习:3个线程不定时写同一全局资源,5个线程不定时读同一全局资源。读并行,写独占,当读写同时等待锁的时候写的优先级高。原创 2023-07-31 15:45:33 · 99 阅读 · 0 评论 -
linux系统编程重点复习06--进程之间通信
Linux环境下,进程地址空间相互独立,每个进程各自有不同的用户地址空间。任何一个进程的全局变量在另一个进程中都看不到,所以进程和进程之间不能相互访问,要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,InterProcess Communication)。原创 2023-08-01 10:05:23 · 199 阅读 · 0 评论 -
linux系统编程重点复习04--文件和目录操作
如果 whence 是 SEEK_END,文件偏移量将被设置为文件长度加上 offset,offset 可以为正也可以为负。新打开文件返回文件描述符表中未使用的最小文件描述符, 调用open函数可以打开或创建一个文件, 得到一个文件描述符.//连到该文件的硬连接数目,刚建立的文件值为1。假设newfd已经指向了一个文件,首先close原来打开的文件,然后newfd指向oldfd指向的文件.//文件的类型和存取的权限。以O_NONBLOCK方式打开可以做非阻塞I/O(NonblockI/O),非阻塞I/O。原创 2023-08-01 15:45:00 · 135 阅读 · 0 评论 -
linux系统编程重点复习08--守护进程和线程
Daemon(精灵)进程,是Linux中的后台服务进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。一般采用以d结尾的名字,如vsftpd Linux后台的一些系统服务进程,没有控制终端,不能直接和用户交互。不受用户登录、注销的影响,一直在运行着,他们都是守护进程。如:预读入缓输出机制的实现;ftp服务器;nfs服务器等。原创 2023-07-30 23:09:57 · 209 阅读 · 0 评论 -
linux系统编程--线程同步
除了生产者、消费者之间要竞争互斥量以外,消费者之间也需要竞争互斥量,但如果汇聚 (链表)中没有数据,消费者之间竞争互斥锁是无意义的。资源还是共享的,线程间也还是竞争的,但通过“锁”就将资源的访问变成互斥操作,而后与时间有关的错误也不会再产生了。由于互斥锁的粒度比较大,如果我们希望在多个线程间对某一对象的部分数据进行共享,使用互斥锁是没有办法实现的,只能将整个数据对象锁住。信号量,是相对折中的一种处理方式,既能保证同步,数据不混乱,又能提高线程并发。有两个线程,一个模拟生产者行为,一个模拟消费者行为。原创 2023-07-25 13:59:37 · 87 阅读 · 0 评论 -
linux系统编程-进程
程序,是指编译好的二进制文件,在磁盘上,不占用系统资源(cpu、内存、打开的文件、设备、锁....)进程,是一个抽象的概念,与操作系统原理联系紧密。进程是活跃的程序,占用系统资源。在内存中执行。程序运行起来,产生一个进程程序 → 剧本纸进程 → 戏舞台、演员、灯光、道具...)同一个剧本可以在多个舞台同时上演。同样,同一个程序也可以加载为不同的进程彼此之间互不影响)如:同时开两个终端。各自都有一个bash但彼此ID不同。原创 2023-07-19 09:38:35 · 170 阅读 · 0 评论 -
linux系统编程-信号
收到信号之前执行自己的代码,收到信号后,不管执行到程序的什么位置,都要暂停运行,去处理信号,处理完毕再继续执行。如:捕捉到信号后,在执行捕捉函数期间,不希望自动阻塞该信号,可将 sa_flags。进程组:每个进程都属于一个进程组,进程组是一个或多个进程集合,他们相互关联,共同完成一个实体任务,某个信号捕捉函数,捕捉到该信号以后,要调用该函数。:不推荐直接使用数字,应使用宏名,因为不同操作系统信号编号可能不同,但名称一致。验证在信号处理函数执行期间,该信号多次递送,那么只在处理函数之行结束后,处理一次。原创 2023-07-21 09:37:48 · 103 阅读 · 0 评论 -
Linux 系统编程-开发环境(三)
但要注意,即使调试的手段非常丰富了,其基本思想仍然是“分析现象->假设错误原因->产生新的现象去验证假设”这样一个循环,根据现象如何假设错误原因,以及如何设计新的现象去验证假设,这都需要非常严密的分析和思考,如果因为手里有了强大的工具就滥用,而忽视了严谨的思维,往往会治标不治本地修正Bug,导致一个错误现象消失了但Bug仍然存在,甚至是把程序越改越错。在该模式下,用户可以输入各种合法的Vi命令,用于管理自己的文档。库的存在,可以使得程序模块化,可以加快程序的再编译,可以实现代码重用,可以使得程序便于升级。原创 2023-07-16 12:00:06 · 309 阅读 · 0 评论 -
Linux 系统编程-开发环境(一)
shell:命令解释器,根据输入的命令执行相应命令。察看当前系统下有哪些shell:察看当前系统正在使用的shell常见shell:/bin/sh (已经被 /bin/bash 所取代)/bin/bash (就是 Linux 默认的 shell)/bin/ksh (Kornshell 由 AT&T Bell lab. 发展出来的,兼容于 bash)/bin/tcsh (整合 C Shell ,提供更多的功能)/bin/csh (已经被 /bin/tcsh 所取代)原创 2023-07-15 20:26:41 · 367 阅读 · 1 评论 -
linux 系统编程-进程中的通信
1.创建映射区的过程中,隐含着一次对映射文件的读操作。2.当MAP_SHARED时,要求:映射区的权限应原创 2023-07-20 11:34:27 · 113 阅读 · 1 评论 -
linux系统编程-线程
下线程的属性是可以根据实际项目需要,进行设置,之前我们讨论的线程都是采用线程的默认属性,默认属性已经可以解决绝大多数开发时遇到的问题。如我们对程序的性能提出更高的要求那么需要设置线程属性,比如可以通过设置线程栈的大小来降低内存的使用,增加最大线程个数。当父进程,创建子进程的时候,默认子进程与父进程属于同一进程组。组长进程可以创建一个进程组,创建该进程组中的进程,然后终止。,将整个进程退出了,所以全部线程退出了。非分离状态:线程的默认属性是非分离状态,这种情况下,原有的线程等待创建的线程结束。原创 2023-07-24 10:56:25 · 147 阅读 · 0 评论 -
Linux 系统编程-开发环境(二)
9.1 创建用户7 压缩包管理7.1 tartar [主选项+辅选项] 文件或者目录tar可以为文件和目录创建档案。利用tar命令用户可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。使用该命令时,主选项是必须要有的,辅选项是辅助使用的,可以选用。主选项包括:c 创建新的档案文件。如果用户想备份一个目录或是一些文件,就要选择这个选项。r 把要存档的文件追加到档案文件的未尾。t 列出档案文件的内容,查看已经备份了哪些文件。u 更新文件。原创 2023-07-15 22:33:47 · 1846 阅读 · 0 评论 -
Linux 系统编辑 --文件IO
参考书1:《Unix环境高级编程》美本讲课堂义作为 APUE的引导。适合初学Linux的学员。原创 2023-07-08 11:11:45 · 338 阅读 · 1 评论 -
linux系统编程-文件系统
首先了解如下文件存储相关概念:inode、 dentry、 数据存储、文件系统。其本质为结构体,存储文件的属性信息。如:权限、类型、大小、时间、用户、盘块位置……也叫作文件属性管理结构,大多数的inode都存储在磁盘上。少量常用、近期使用的inode会被缓存到内存中。目录项,其本质依然是结构体,重要成员变量有两个 {文件名,inode,...},而文件内容(data)保存在磁盘盘块中。文件系统是,一组规则,规定对文件的存储及读取的一般方法。文件系统在磁盘格式化过程中指定。原创 2023-07-17 21:17:55 · 145 阅读 · 0 评论