带有\n的printf被优化成puts 带有\n的printf被优化成putstest.c 1234567891011#include <stdio.h>int func(int a){ return 0;}int main(){ printf("Hello world\n"); return 0;} 编译成可重定位文件.o gcc -c tes 2020-09-14 编程语言 > 编译与链接
多线程并发简单聊天室实现 多线程并发的简单聊天室实现 server:每一个clnt对应一个线程,将从线程接收到的消息都转发个所有已经建立连接的clnt, clnt:一个线程用来发送msg给server,一个 线程用来接受msg并输出到stdout server.c 使用了mutex建立临界区避免同时操作 12345678910111213141516171819202122232425262728293031323334 2020-09-12 网络与服务 > 网络编程
线程同步:指定2个线程按顺序执行(信号量) 如何让2个线程按照先后顺序执行n次呢?如:线程A从用户输入得到值后存入全局变量num,此时线程B取走此值并且累加,总共执行n(5)次,完成后输出和 <很有意思的问题,在基本忘掉了所以线程同步方法(只记得mutex,和基本信号量原理)的情况下,考虑为什么2个mutex不能实现?> 我认为的原因: mutex不能决定进程A还是进程B谁先执行(而信号量初始化的时候可以控制状态),对于临 2020-09-11 系统与底层 > Unix系统编程
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); 第二个参数optio 2020-09-09 网络与服务 > 网络编程
socket使用标准IO流分离 fd和标准IO相互转换 fd->FILE* FILE * fdopen(int fd,const char *mode); 1234567891011121314151617#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 网络与服务 > 网络编程
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_DONTW 2020-09-05 网络与服务 > 网络编程
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 2020-09-04 网络与服务 > 网络编程 #socket
多进程服务器端 多进程服务端 利用信号回收子进程例子(利用子进程结束后向父进程发送SIGCHLD信号来回收子进程 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253#include <me.h>//子进程结束信号void read_childproc(int 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向B发送完 2020-08-24 网络与服务 > 网络编程 #socket