随笔分类 -  linux

摘要:三次握手: 四次挥手: 阅读全文
posted @ 2023-03-14 23:00 踏浪而来的人 阅读(35) 评论(0) 推荐(0)
摘要:tcp_server.c #include <signal.h> #include <stdio.h> #include <errno.h> #include <unistd.h> #include <stdlib.h> #include <time.h> #include <string.h> # 阅读全文
posted @ 2023-03-14 22:55 踏浪而来的人 阅读(19) 评论(0) 推荐(0)
摘要:客户端服务端编程模型: 服务器调用序列 客户端调用序列 1. 调用socket函数创建套接字 1. 调用socket函数创建套接字 2. 调用bind函数绑定本地地址和端口 2. 调用connect函数连接服务器 3. 调用listen函数启动监听 3. 调用read/write函数与服务器通信 4 阅读全文
posted @ 2023-03-07 22:08 踏浪而来的人 阅读(17) 评论(0) 推荐(0)
摘要:socket是一种通讯机制,它给应用程序提供了使用如TCP/UDP的网络协议的方式; linux中的网络编程是通过socket接口实现的,socket是一种特殊的IO,提供对应的文件描述符。 一个完整的socket包括: 协议、本地地址、本地端口、远端地址、远端端口; 字节序: 不同体系结构的主机使 阅读全文
posted @ 2023-03-07 21:46 踏浪而来的人 阅读(22) 评论(0) 推荐(0)
摘要:什么是协议? 即通信双方共同遵守的约定、规则。一方按照这种规则发送,另一方必须按照这种规则解析,这样数据才不会发生错乱,传输的数据才会正确 网络的分层: TCP/IP协议族大体上分为三部分: 1. 网络协议(IP协议,网络层) 2. 传输协议(TCP/UDP协议,传输层) 3. 应用协议(FTP协议 阅读全文
posted @ 2023-03-07 20:54 踏浪而来的人 阅读(142) 评论(0) 推荐(0)
摘要:信号量本质上就是共享资源的数目,用来控制对共享资源的访问; 信号量可用于进程间的同步和互斥; 每种共享资源对应一个信号量,信号量集就是有很多信号量,便于大量共享资源的操作,信号量集中的所有操作可以要求全部成功,也可以部分成功; 二元信号量(信号灯)值为0和1; 对信号量的操作就是进行PV操作; 信号 阅读全文
posted @ 2023-03-06 22:30 踏浪而来的人 阅读(197) 评论(0) 推荐(0)
摘要:共享内存是被多个进程共享的一部分物理内存; 写入共享内存后,数据不会消失,可以一直读取; 再次向共享内存中写入,会覆盖原来的数据,即每次写数据都是从相同的位置上写(从shmat函数返回的地址开始写) 多进程想要进程数据通信,就得把这块共享内存映射到自己的虚拟地址空间,其在虚拟地址空间的位置: 共享内 阅读全文
posted @ 2023-03-06 20:43 踏浪而来的人 阅读(351) 评论(0) 推荐(0)
摘要:System V IPC: Unix系统存在信号、管道等基本的进程间的通信机制; System V引入了三种高级的进程通信机制: 消息队列、共享内存、信号量 IPC对象(消息队列、共享内存、信号量)存在于内核中而不是文件系统中(虽然管道也是在内核中,但是它的释放由内核控制),由用户控制释放(即用户管 阅读全文
posted @ 2023-03-05 21:56 踏浪而来的人 阅读(138) 评论(0) 推荐(0)
摘要:管道的实质:内核中的一块缓冲区 管道是单工的,数据只能从一个方向流向另外一个方向(单向);想要双向通信时,需要建立两个管道。 先写进管道中的数据先被读出。 无名管道: 用于有血缘关系的进程 int pipe(int fd[2]) 返回:成功返回0;失败:-1 因为pipe函数在fork之前调用,所以 阅读全文
posted @ 2023-03-02 23:04 踏浪而来的人 阅读(105) 评论(0) 推荐(0)
摘要:六种通讯方式: 1. 无名管道和命名管道 2. 信号 3. 消息队列 4. 共享内存 5. 信号量 6. 套接字 所有进程共享3~4G的内核空间,所以基于内核之间的通信能够实现(为了保证安全,每个进程的用户地址空间都是独立的,一般而言一个进程不能直接访问另一个进程的地址空间,不过内核空间是每个进程都 阅读全文
posted @ 2023-03-02 19:36 踏浪而来的人 阅读(29) 评论(0) 推荐(0)
摘要:原因: 如有两个线程,两把互斥锁,线程1先对互斥锁A上锁,延时,然后在对互斥锁B上锁;二线程2先对互斥锁B上锁,延时,再对互斥锁A上锁,这样就会死锁,因为两线程以不同顺序拿到了对方的锁,并且不能解锁; 解决方式: 1. 以相同的顺序加锁 2. 使用pthread_mutex_trylock()函数 阅读全文
posted @ 2023-02-26 23:02 踏浪而来的人 阅读(22) 评论(0) 推荐(0)
摘要:线程信号量可以实现线程的互斥和线程的同步。 信号量的数据类型:sem_t 信号量本质上是一个非负整数计数器,是共享资源的数目(即共享资源还剩下几个,信号量的值大于或等于0时,线程才不阻塞) 信号量的创建和销毁: 参数: sem:信号量指针 pshared:是否在进程之间共享;0为不共享,1为共享 v 阅读全文
posted @ 2023-02-26 22:50 踏浪而来的人 阅读(124) 评论(0) 推荐(0)
摘要:1. 条件变量(通互斥锁一起使用,互斥锁用来保护等待队列的) 2. 线程信号量 条件变量: 条件变量的内部是一个等待队列,这个队列中放置阻塞的线程,线程在这个队列中等待通知。 因为这个等待队列也时一个共享资源,所以也要用一把互斥锁来保护,即对等待队列上锁。 队列中的线程等特定的条件发生,当条件不满足 阅读全文
posted @ 2023-02-26 21:10 踏浪而来的人 阅读(27) 评论(0) 推荐(0)
摘要:1. 互斥锁 2. 读写硕 3. 线程信号量 互斥锁: 互斥锁的数据类型:pthread_mutex_t 互斥锁是一种加锁的方法来控制对共享资源的访问。同一时刻只能由一个线程掌握某个互斥锁(就是有一把互斥锁),一个线程对共享资源上锁了,其他线程希望上锁一个已经上了互 斥锁的共享资源,那么这些线程将会 阅读全文
posted @ 2023-02-26 10:33 踏浪而来的人 阅读(161) 评论(0) 推荐(0)
摘要:互斥: 相互排斥,表示线程对共享资源的访问时相互排斥的,即不能同时操作(一个线程对共享资源写时,另外一个线程不能再对这个共享资源进行读写),保证线程的安全,互斥不能保证 线程执行的先后顺序 实现互斥的方式: 互斥锁 读写锁 线程信号量 同步: 包含了互斥,即既保证了线程的安全,又能保证线程执行的先后 阅读全文
posted @ 2023-02-26 09:25 踏浪而来的人 阅读(41) 评论(0) 推荐(0)
摘要:线程的属性实现线程创建的时候(pthread_create)指定 线程属性的初始化和销毁 线程属性的结构: 如果线程设置了分离状态这个属性,那么可以在线程结束时,主线程不用调用pthreat_join函数来回收这个线程的资源,他会自动回收 获得和设置分离属性: 阅读全文
posted @ 2023-02-22 23:13 踏浪而来的人 阅读(26) 评论(0) 推荐(0)
摘要:状态转换: 阅读全文
posted @ 2023-02-22 22:33 踏浪而来的人 阅读(20) 评论(0) 推荐(0)
摘要:当线程调用pthread_exit函数时,如果execute为非0,将执行线程push的清理函数 注意: push和pop函数是成对存在的,先push的清理函数后调用 阅读全文
posted @ 2023-02-22 22:30 踏浪而来的人 阅读(21) 评论(0) 推荐(0)
摘要:线程终止的方式: 1. 主动终止 a. 线程运行函数中调用return b. 线程中调用pthread_exit函数 2. 被动终止 线程可以被同一进程的其他线程取消,其他线程调用pthread_cancel函数 不管在哪个线程中调用exit()、_exit、_Exit函数,进程都会终止 阅读全文
posted @ 2023-02-22 22:16 踏浪而来的人 阅读(28) 评论(0) 推荐(0)
摘要:pthread_creat函数 头文件: #include <pthread.h> 函数原型: int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), voi 阅读全文
posted @ 2023-02-22 21:17 踏浪而来的人 阅读(22) 评论(0) 推荐(0)