![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux编程
文章平均质量分 94
随便写写。
这个作者很懒,什么都没留下…
展开
-
linux编程:网络编程(二)
多路IO转接服务器也叫做多任务IO服务器。该类服务器实现的主旨思想是,不再由应用程序自己监视客户端连接,取而代之由内核替应用程序监视文件。主要使用的方法有三种由内核监听客户端的行为,当客户端需要建立连接时,内核通知服务器直接建立连接,当客户端写入数据时,由内核通知服务器,服务器就直接读取数据。这就使得需要等待的io操作有内核完成,服务器直接进行业务处理而不需要阻塞等待。但如果链接客户端过多,select采用的是轮询模型,会大大降低服务器响应效率pselect原型如下。原创 2023-09-20 00:01:13 · 124 阅读 · 0 评论 -
linux编程:网络编程(一)
网络基础协议的概念什么是协议从应用的角度出发,协议可理解为“规则”,是数据传输和数据的解释的规则。假设,A、B双方欲传输文件。规定:第一次,传输文件名,接收方接收到文件名,应答OK给传输方;第二次,发送文件的尺寸,接收方接收到该数据再次应答一个OK;第三次,传输文件内容。同样,接收方接收数据完成后应答OK表示文件内容接收成功。由此,无论A、B之间传递何种文件,都是通过三次数据传输来原创 2023-09-19 23:37:01 · 198 阅读 · 0 评论 -
linux编程:守护进程
在UNIX系统中,用户通过终端登录系统后得到一个Shell进程,这个终端成为Shell进程的控制终端(Controlling Terminal),进程中,控制终端是保存在PCB中的信息,而fork会复制PCB中的信息,因此由Shell进程启动的其它进程的控制终端也是这个终端。进程组,也称之为作业。操作系统设计的进程组的概念,是为了简化对多个进程的管理。参数a表示不仅列当前用户的进程,也列出所有其他用户的进程,参数x表示不仅列有控制终端的进程,也列出所有无控制终端的进程,参数j表示列出与作业控制相关的信息。原创 2023-09-19 22:56:37 · 83 阅读 · 0 评论 -
linux编程:进程间通信
2. 如果有指向管道写端的文件描述符没关闭(管道写端引用计数大于0),而持有管道写端的进程也没有向管道中写数据,这时有进程从管道读端读数据,那么管道中剩余的数据都被读取后,再次read会阻塞,直到管道中有数据可读了才读取数据并返回。4. 如果有指向管道读端的文件描述符没关闭(管道读端引用计数大于0),而持有管道读端的进程也没有从管道中读数据,这时有进程向管道写端写数据,那么在管道被写满时再次write会阻塞,直到管道中有空位置了才写入数据并返回。父进程可以向管道中写入数据,子进程将管道中的数据读出。原创 2023-09-19 22:40:36 · 46 阅读 · 0 评论 -
linux编程:进程
一个进程在终止时会关闭所有文件描述符,释放在用户空间分配的内存,但它的PCB还保留着,内核在其中保存了一些信息:如果是正常终止则保存着退出状态,如果是异常终止则保存着导致该进程终止的信号是哪个。ls命令也是一个程序,执行它不需要提供完整的路径名/bin/ls,然而通常我们执行当前目录下的程序a.out却需要提供完整的路径名./a.out,这是因为PATH环境变量的值里面包含了ls命令所在的目录/bin,却不包含a.out所在的目录。这样设计,无论子进程执行父进程的逻辑还是执行自己的逻辑都能节省内存开销。原创 2023-09-19 22:23:08 · 81 阅读 · 0 评论 -
linux编程:线程同步
当一个写线程加写锁后,其他所有试图获得锁的线程都会阻塞,当该线程释放写锁后,如果阻塞的线程有写线程,则会优先给他写锁,没有就会给读线程读锁,当读线程请求读锁时,能够成功读取,当有写线程请求写锁则会进入阻塞,后面请求读锁的线程也会进入阻塞,读锁释放后,会给写线程加锁执行写操作。如直接使用mutex,除了生产者、消费者之间要竞争互斥量以外,消费者之间也需要竞争互斥量,但如果汇聚(链表)中没有数据,消费者之间竞争互斥锁是无意义的。当A线程对某个全局变量加锁访问,B在访问前尝试加锁,拿不到锁,B阻塞。原创 2023-09-18 23:37:00 · 51 阅读 · 0 评论 -
linux编程:线程
在一个线程中调用pthread_create()创建新的线程后,当前线程从pthread_create()返回继续往下执行,而新的线程所执行的代码由我们传给pthread_create的函数指针start_routine决定。线程id的类型是thread_t,它只在当前进程中保证是唯一的,在不同的系统中thread_t这个类型有不同的实现,它可能是一个整数值,也可能是一个结构体,也可能是一个地址,所以不能简单地当成整数用printf打印,调用pthread_self(3)可以获得当前线程的id。原创 2023-09-18 22:55:13 · 61 阅读 · 0 评论 -
linux编程:信号
信号在我们的生活中随处可见, 如:古代战争中摔杯为号;现代战争中的信号弹;体育比赛中使用的信号枪…他们都有共性:1. 简单 2. 不能携带大量信息 3. 满足某个特设条件才发送。信号是信息的载体,Linux/UNIX 环境下,古老、经典的通信方式, 现下依然是主要的通信手段。Unix早期版本就提供了信号机制,但不可靠,信号可能丢失。Berkeley 和 AT&T都对信号模型做了更改,增加了可靠信号机制。但彼此不兼容。POSIX.1对可靠信号例程进行了标准化。原创 2023-09-17 23:25:00 · 102 阅读 · 0 评论