![](https://img-blog.csdnimg.cn/20190927151053287.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
LINUX系统编程
文章平均质量分 85
基于alientek alpha正点原子阿尔法的笔记
把车开起来
这个作者很懒,什么都没留下…
展开
-
守护进程(精灵进程)
但守护进程能突破这种限制,它脱离终端并且在后台运行)。守护进程(Daemon) 也称为精灵进程,是运行在后台的一种特殊进程,通常运行在操作系统启动时就开始运行,并一直在后台运行,直到系统关闭或它被停止为止(普通进程都是在用户登录或运行程序时创建,在运行结束或用户注销时终止,但守护进程不受用户登录注销的影响,它们将会一直运行着、直到系统关机)。守护进程 Daemon,通常简称为 d,一般进程名后面带有 d 就表示它是一个守护进程;表示该进程没有控制终端,也就是守护进程。特点:长期运行、与控制终端脱离。原创 2023-06-02 09:23:11 · 528 阅读 · 0 评论 -
Linux socket聊天室
socket与多线程原创 2023-04-07 12:05:55 · 1614 阅读 · 5 评论 -
同步与互斥之信号量
信号量广泛用于进程或线程间的同步和互斥,信号量本质上是一个非负的整数计数器,它被用来控制对公共资源的访问。当信号量值大于 0 时,则可以访问,否则将阻塞。信号量是一种用于控制进程或线程同步和互斥的机制。它通常由一个计数器和一组等待的进程或线程组成。当进程或线程需要访问共享资源时,它会尝试获取一个信号量。如果信号量的计数器大于0,则进程或线程可以获得信号量并继续执行。否则,进程或线程将被阻塞,直到有信号量可用。PV 原语是对信号量的操作,一次 P 操作使信号量减1,一次 V 操作使信号量加1。原创 2023-03-24 20:53:31 · 1318 阅读 · 0 评论 -
线程的同步
对于一个单线程进程来说,它不需要处理线程同步的问题,所以线程同步是在多线程环境下可能需要注意的一个问题。线程的主要优势在于,资源的共享性,譬如通过全局变量来实现信息共享,不过这种便捷的共享是有代价的,那就是多个线程并发访问共享数据所导致的数据不一致的问题。线程同步是为了对共享资源的访问进行保护。这里说的共享资源指的是多个线程都会进行访问的资源,譬如定义了一个全局变量 a,线程 1 访问了变量 a、同样在线程 2 中也访问了变量 a,那么此时变量 a 就是多个线程间的共享资源,大家都要访问它。原创 2023-03-24 20:54:56 · 541 阅读 · 0 评论 -
线程与子线程
线程是参与系统调度的最小单位。它被包含在进程之中, 是进程中的实际运行单位。一个线程指的是进程中一个单一顺序的控制流(或者说是执行路线、执行流), 一个进程中可以创建多个线程, 多个线程实现并发运行, 每个线程执行不同的任务。譬如某应用程序设计了两个需要并发运行的任务 task1 和 task2,可将两个不同的任务分别放置在两个线程中当启动应用程序后,系统就创建了一个进程,可以认为进程仅仅是一个容器, 它包含了线程运行所需的数据结构、环境变量等信息。原创 2023-03-24 20:51:32 · 1266 阅读 · 0 评论 -
进程间通信
进程间通信(interprocess communication,简称 IPC) 指两个进程之间的通信。系统中的每一个进程都有各自的地址空间,并且相互独立、隔离, 每个进程都处于自己的地址空间中。所以同一个进程的不同模块(譬如不同的函数)之间进行通信都是相对简单的,譬如使用全局变量等但是,两个不同的进程之间要进行通信通常是比较难的,因为这两个进程处于不同的地址空间中;通常情况下,大部分的程序是不要考虑进程间通信的,对于一些复杂、大型的应用程序,则会根据实际需要将其设计成多进程程序。原创 2023-03-24 20:52:41 · 796 阅读 · 0 评论 -
exec 族函数
当子进程的工作不再是运行父进程的代码段,而是运行另一个新程序的代码,那么这个时候子进程可以通过 exec 函数来实现运行另一个新的程序。为什么需要在子进程中执行新程序?虽然可以直接在子进程分支编写子进程需要运行的代码,但是不够灵活,扩展性不够好,直接将子进程需要运行的代码单独放在一个可执行文件中更好吗, 所以就出现了 exec 操作。原创 2023-03-24 20:51:41 · 1164 阅读 · 0 评论 -
进程与子进程
事实上,子进程是父进程的一个副本, 譬如子进程拷贝了父进程的数据段、堆、栈以及继承了父进程打开的文件描述符,父进程与子进程并不共享这些存储空间,这是子进程对父进程相应部分存储空间的完全复制,执行 fork()之后,每个进程均可修改各自的栈数据以及堆段中的变量,而并不影响另一个进程。在 Linux 系统当中,所有的孤儿进程都自动成为 init 进程(进程号为 1)的子进程, 换言之,某一子进程的父进程结束后,该子进程调用 getppid()将返回 1, init 进程变成了孤儿进程的“养父”原创 2023-03-24 20:50:45 · 559 阅读 · 0 评论 -
信号与信号集
sigsuspend()函数会将参数 mask 所指向的信号集来替换进程的信号掩码,也就是将进程的信号掩码设置为参数 mask 所指向的信号集,然后挂起进程,直到捕获到信号被唤醒(如果捕获的信号是 mask 信号集中的成员,将不会唤醒、继续挂起) 、并从信号处理函数返回,一旦从信号处理函数返回, sigsuspend()会将进程的信号掩码恢复成调用前的值。那么就是通过信号掩码来实现, 如果进程接收到了信号掩码中的这些信号,那么这个信号将会被阻塞暂时不能得到处理,直到这些信号从进程的信号掩码中移除。原创 2023-03-24 20:49:49 · 518 阅读 · 0 评论 -
标准I/O
利用fopen/fwrite/fclose/fprintf函数实现文件内容复制。原创 2023-03-24 20:48:11 · 416 阅读 · 0 评论 -
文件I/O
下面编写一个文件内容复制的程序,对read、write、open、close、lseek、fprintf、strerror、exit函数的综合使用。原创 2023-03-24 20:47:32 · 312 阅读 · 0 评论