linux系统编程
linux系统编程
我在这里啊@
小白
展开
-
select,poll,epoll辨析
https://www.cnblogs.com/aspirant/p/9166944.htmlselect,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用户空间。1.s原创 2020-08-30 08:19:23 · 131 阅读 · 0 评论 -
条件变量和互斥锁的配合使用
参数原创 2020-08-08 11:48:44 · 850 阅读 · 0 评论 -
线程池
1.线程池的基本原理在传统服务器结构中, 每当有一个新的用户进入, 服务器就开启一个新的线程用户处理这 个用户的数据包。这个线程只服务于这个用户 , 当 用户与服务器端关闭连接以后,服务器端销毁这个线程。然而频繁地开辟与销毁线程极大地占用了系统的资源。 线程池的基本思想就是在程序 开始时就在内存中开辟一些线程, 线程的数目是 固定的,他们独自形成一个类,屏蔽了对外的操作, 而服务器只需要将数据包交给线程池就可以了。当有新的客户请求到达时 , 从“池子”中选择一个空闲的线程为新的客户请求服务 ,服务完毕后原创 2020-08-08 11:48:07 · 136 阅读 · 0 评论 -
死锁的产生和避免
的原创 2020-08-06 22:11:17 · 97 阅读 · 0 评论 -
进程间通信方式(管道,IPC,信号)
进程间通信1.无名管道2.有名管道3.两种管道通信的对比4.信号机制5.IPC通信6.共享内存7.消息队列8.信号灯集线程由于共享资源,可以直接定义全局变量实现通信,但是进程就不行了,接下来主要介绍几种进程间的通信方式。1.无名管道只能用于具有亲缘关系的进程之间的通信,比如说父子进程,兄弟进程。实际上,文件描述符是一个索引值,系统为每一个进程都维护了一个文件描述符表。也就是说,在不同的进程中打开同一个文件返回的fd未必相等,因此进程间不能通过传递fd的方式来打开同一个文件。而子进程会继承父进程打开的原创 2020-08-06 21:57:38 · 413 阅读 · 0 评论 -
进程,线程,互斥锁,信号量
一. 进程:子进程几乎继承了父进程中所有的内容,包括变量,打开的文件等等,但是他们有着独立的地址空间,也就是说在子进程或者父进程中改变相同的那个变量,对另一个进程是没有影响的。父进程先结束,子进程会变成孤儿进程,系统会让孤儿进程被init进程收养,这个init进程是内核启动以后创建的第一个用户态进程,进程号是1,也就是说孤儿进程的进程号都是1 ,且会变成后台进程。若子进程先结束,父进程没有及时回收,那么子进程会变成僵尸进程结束一个进程用exit,并刷新流的缓冲区int execl(const c原创 2020-08-06 09:22:31 · 274 阅读 · 0 评论 -
线程互斥和同步的实现方法
1.同步:线程函数之间运行时存在先后关系,则成为同步解决办法:信号量信号量也是一个变量,需要初始化1. sem_init 函数形式:int sem_init(sem_t *sem, int pshared, unsigned int value)。 功能:初始化信号量值。 参数:sem为信号量变量指针;pshared指定信号量是由进程内线程共享,还是由进程之间共享,若为了0则是线程共享,...原创 2020-05-05 09:09:17 · 998 阅读 · 0 评论 -
关于失去thread_join子线程无法运行的问题
#include <stdio.h>#include <stdlib.h>void *fun(void *s){ char *p; int i = 0; char *m; p = (char *)s; for(i = 0; i < 5; i++) { printf("this is pthread function %d\n", i); ...原创 2020-05-05 08:27:25 · 344 阅读 · 0 评论 -
Linux系统使用消息队列实现进程间通信
实现a进程和b进程间的通信,通过一个server进行中转,也可以不通过server直接互发消息,在本地需要创建一个save.txt文件(ftok的需要)//a进程#include <stdio.h>#include <stdlib.h>#include <sys/msg.h>#include <string.h>struct msgbu...原创 2020-05-03 15:49:01 · 337 阅读 · 0 评论 -
Linux系统使用有名管道实现进程间双工通信
创建两个有名管道,分别用来读和写,用四个进程来完成。//a用来读取信息,b用来写入信息的管道#include "stdio.h"#include "stdlib.h"int main(){ int ret; ret = mkfifo("./arfifo",0777); if(-1 == ret) { printf("mkfifo error\n"); exit(-1);...原创 2020-04-30 12:32:10 · 1010 阅读 · 0 评论