多线程并发简单聊天室实现 多线程并发的简单聊天室实现 server:每一个clnt对应一个线程,将从线程接收到的消息都转发个所有已经建立连接的clnt, clnt:一个线程用来发送msg给server,一个 线程用来接受msg并输出到stdout server.c 使用了mutex建立临界区避免同时操作 123456789101112131415161718192021222324252627282930313233 2020-09-12 Linux学习
线程同步:指定2个线程按顺序执行(信号量) 如何让2个线程按照先后顺序执行n次呢?如:线程A从用户输入得到值后存入全局变量num,此时线程B取走此值并且累加,总共执行n(5)次,完成后输出和 <很有意思的问题,在基本忘掉了所以线程同步方法(只记得mutex,和基本信号量原理)的情况下,考虑为什么2个mutex不能实现?> 我认为的原因: mutex不能决定进程A还是进程B谁先执行(而信号量初始化的时候可以控制状态),对 2020-09-11 Linux学习
epoll入门 epoll 对比select不需要 自己向OS传递监视对象信息,epoll由OS负责保存 监视对象文件fd,通过epoll_create()向OS申请资源 int epoll_create(int size); 在epoll实例中注册对象文件描述符int epoll_ctl(int epfd,int op,int fd,struct epoll_event *event); 第二个参数opt 2020-09-09 Linux学习
socket使用标准IO流分离 fd和标准IO相互转换 fd->FILE* FILE * fdopen(int fd,const char *mode); 123456789101112131415161718#include <me.h>int main(void){ FILE *fp; int fd = open("news.txt",O_RDWR); if (fd 2020-09-08 计算机网络
多播/广播 多播 多播组地址:D类IP(具体的还没学) 发送方设置TTL,接收方设置所在多组播组IP setsockopt,IPPROTO_IP层选项: IP_MULTICAST_TTL:生存时间(time to live):组播传送距离 IP_ADD_MEMBERSHIP:加入组播 多播基于UDP协议完成,对面1000个用户,不需要像TCP建立1000个连接,不需要像UDP1000次数据传 2020-09-07 Linux学习
recv函数MSG_PEEK|MSG_DONTWAIT|MSG_OOB选项 send recv函数12ssize_t send(int sockfd,const void* buf,size_t nbytes,int flags);ssize_t recv(int sockfd,void* buf,size_t nbytes,int flags); 之前一直在linux下使用read和write函数, MSG_OOB:TCP只有紧急模式,没有带外数据 MSG_DO 2020-09-05 Linux学习
IO多路复用-select实现简单回声服务 I/O多路复用-select函数功能:将多个文件描述符统一监视,描述符是否能读写,以及是否发生异常? 1int select(int maxfd,fd_set* readfds,fd_set* writefds,fd_set* exceptfds,timeval* timeout); fs_set注册使用由系列宏来完成,将fd_set看成bit map FD_ZERO(fd_set* f 2020-09-04 Linux学习 socket
多进程服务器端 多进程服务端 利用信号回收子进程例子(利用子进程结束后向父进程发送SIGCHLD信号来回收子进程 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354#include <me.h>//子进程结束信号void read_childproc( 2020-08-29 计算机网络 socket
Time_wait状态端口重利用 连接断开的过程:主机A发起请求断开连接,主机B回应ACK,FIN包,当主机A收到FIN包时,TIME_WAIT定时器开始启动,然后A向B发送ACK包,因为B没有收到ACK包,所以B不知道自己的FIN包是否发送成功 B成功收到ACK包,连接断开 B没有收到ACK包,认为自己发送的FIN包出现问题,则重新发送FIN包, 为什么有Time_wait状态? 如果没有Time_wait状态,A向 2020-08-24 计算机网络 socket
编译当前目录所有.c 头文件都放在./include中 CC = gcc CFLAGS = -o2 -I include/ SRC = $(wildcard *.c) #代表所有的.c文件 TAR = $(patsubst %.c,%, $(SRC)) # 2020-08-19 Makefile