![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c语言
北京时光
如果生命是一树繁华,那么我愿默守枝丫,随风尘起落。
展开
-
c 本地socket
socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是UNIX Domain Socket。虽然网络socket也可用于同一台主机的进程间通讯(通过loopback地址127.0.0.1),但是UNIX Domain Socket用于IPC更有效率:不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序号和应答等,只是将应用层数据从一个进程拷贝到另一个进程。这是因为,IPC机制本质上是可靠的通讯,而网络协议是为不可靠的通讯设计的。UNIX Domain .原创 2021-02-09 14:52:16 · 207 阅读 · 0 评论 -
c UDP-实现广播/组播
IP:192.168.42.255(广播) --32位 255 255.255.255.255IP:192.168.42.1(网关)int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen); //默认无权限,需要给sockfd开放广播权限。server.c#include <stdio.h>#include <unistd.h>#inclu.原创 2021-02-09 13:36:44 · 1375 阅读 · 0 评论 -
c 网络通信-UDP
由于UDP无需创建连接,所以UDP开销较小,数据传输速度快,实时性较强。多用于对实时性要求较高的通信场合,如视频会议、电话会议等。但随之也伴随着数据传输不可靠,传输数据的正确率、传输顺序和流量都得不到控制和保证。所以,通常情况下,使用UDP协议进行数据传输,为保证数据的正确性,我们需要在应用层添加辅助校验协议来弥补UDP的不足,以达到数据可靠传输的目的。与TCP类似的,UDP也有可能出现缓冲区被填满后,再接收数据时丢包的现象。由于它没有TCP滑动窗口的机制,通常采用如下两种方法解决:服务器应用层.原创 2021-02-08 16:54:49 · 371 阅读 · 0 评论 -
c 线程池
threadpool.h#ifndef __THREADPOOL_H_#define __THREADPOOL_H_typedef struct threadpool_t threadpool_t;/** * @function threadpool_create * @descCreates a threadpool_t object. * @param thr_num thread num * @param max_thr_num max thread size * @para原创 2021-02-08 14:14:53 · 153 阅读 · 0 评论 -
c- io多路复用 epoll
epoll不仅仅可以监听socket, 管道符,文件都可以监听.epoll是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率,因为它会复用文件描述符集合来传递结果而不用迫使开发者每次等待事件之前都必须重新准备要被侦听的文件描述符集合,另一点原因就是获取事件的时候,它无须遍历整个被侦听的描述符集,只要遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行了。目前epell是linux大规模并发网络程序中的热门原创 2021-02-08 14:13:10 · 195 阅读 · 0 评论 -
c- io多路复用 poll
参数说明:点击进入server.c#include <stdio.h>#include <stdlib.h>#include <string.h>#include <netinet/in.h>#include <arpa/inet.h>#include <poll.h>#include <errno.h>#include <ctype.h>#include "wrap.h"#defin原创 2021-02-07 14:27:44 · 122 阅读 · 0 评论 -
c- io多路复用 select
select能监听的文件描述符个数受限于FD_SETSIZE,一般为1024,单纯改变进程打开的文件描述符个数并不能改变select监听文件个数解决1024以下客户端时使用select是很合适的,但如果链接客户端过多,select采用的是轮询模型,会大大降低服务器响应效率,不应在select上投入更多精力声明#include <sys/select.h>/* According to earlier standards */#include <sys/time...原创 2021-02-07 10:50:26 · 174 阅读 · 0 评论 -
c TCP 通讯
3. MTU、mss、半关闭以太网帧最大字节限制为1500个字节,所以一次性发送超出限制的会多次发送4. 错误处理read返回值:返回值大于0, 实际读取到的字节数返回值等于0 数据读完(读到文件、管道、socket 末尾–对端关闭)返回值-1 异常出现的情况,可能是因为系统慢速调用,进程被信号中断了.异常情况1: errno == EINTR 被信号中断 重启/quit异常情况2: errno == EAGAIN (EWOULDBLOCK) 非阻塞方式读,并且没有数据异常情况原创 2021-02-05 13:49:48 · 438 阅读 · 0 评论 -
c tcp-多线程
server.c#include <stdio.h>#include <string.h>#include <arpa/inet.h>#include <pthread.h>#include <ctype.h>#include <unistd.h>#include <fcntl.h>#include "wrap.h"#define MAXLINE 8192#define SERV_PORT 8000原创 2021-02-05 13:34:25 · 157 阅读 · 0 评论 -
c tcp -多进程
wap.h#ifndef __WRAP_H_#define __WRAP_H_void perr_exit(const char *s);int Accept(int fd, struct sockaddr *sa, socklen_t *salenptr);int Bind(int fd, const struct sockaddr *sa, socklen_t salen);int Connect(int fd, const struct sockaddr *sa, socklen_t s原创 2021-02-05 11:27:54 · 99 阅读 · 0 评论 -
c 封装的tcp
wrap.h#ifndef __WRAP_H_#define __WRAP_H_void perr_exit(const char *s);int Accept(int fd, struct sockaddr *sa, socklen_t *salenptr);int Bind(int fd, const struct sockaddr *sa, socklen_t salen);int Connect(int fd, const struct sockaddr *sa, socklen_t原创 2021-02-04 16:33:47 · 181 阅读 · 0 评论 -
c- 套接字socket
socket 记录了 本机IP和port,是Linux文件的一种类型(伪文件)socket创建以后,也会有个文件描述符, 但是有两个缓冲区. ,一个缓冲区用于写入, 一个缓冲区用于读出.socket是全双工的 既能写入,也能读出.ip地址:在网络环境中唯一标示一台主机端口号:标示一台进程socket:IP+port 网络环境中唯一标示一台进程管道:而......原创 2021-02-03 11:11:01 · 208 阅读 · 0 评论 -
c-互斥锁 读写锁 信号量
互斥锁pthread_mutext_t mutext;# include <stdio.h># include <pthread.h> pthread_mutex_t mute;int value = 0;void *fun(void *arg){ //上锁,函数是阻塞的 pthread_mutex_lock(&mute); printf("now is %d and old value is %d \n",*((int *)arg)原创 2021-01-29 17:38:59 · 434 阅读 · 0 评论 -
c 线程
创建线程以后,地址空间没有变化,进程退化成线程. 创建的子线程和主线程公用一份地址空间.主线程和子线程共享的部分.text.bass.data堆 动态库加载区 环境变量 命令行参数可以通过 全局变量 或 堆进行通信不共享的部分栈...原创 2021-01-20 14:59:15 · 1408 阅读 · 3 评论 -
c创建守护进程
创建守护进程以及为什么fork两次转载 2021-01-20 11:53:21 · 121 阅读 · 0 评论 -
c语言-信号
特点简单携带的信息量少使用在某个特定场景中信号的状态产生未决状态- 没有被处理递达状态- 信号被处理了通过man函数查找信号man 7 signal概念:阻塞信号集/未决信号集在 pcb 中,不能够直接操作阻塞信号集 - 要屏蔽的信号未决信号集 - 没有被处理的信号的集合...原创 2021-01-19 16:40:29 · 776 阅读 · 1 评论 -
c语言-mmap创建内存映射区
创建有名内存映射区#include<stdlib.h>#include<string.h>#include<sys/types.h>#include<sys/stat.h>#include<unistd.h>#include<fcntl.h>#include<sys/mman.h>#include<stdio.h>int main(){ int fd=-1; int ret=-1;原创 2021-01-18 18:00:03 · 423 阅读 · 0 评论 -
c语言-管道-有名管道
有名管道特点:在磁盘上有这么一个文件, 当ls -l查看该文件时, 他的类型为p是一个伪文件,占用磁盘大小永远为0.数据存储在内核里.有一个对应的缓冲区.fifo文件可以用io函数进行操作open/close read/write 但不能用lseek进程间通信:两个不相干的进程可以通信使用场景:没有血缘关系的进程间通信创建方式:命令方式创建: mkfifo 管道名函数方式创建: mkfifo函数代码如下:在这里插入代码片......原创 2021-01-13 13:57:42 · 909 阅读 · 0 评论 -
c语言-fork- 子进程
#include<stdio.h>#include<sys/types.h>#include<sys/stat.h>#include<unistd.h>int main(){ int i = 0; pid_t pid; for(i = 0; i<3; i++) { pid = fork(); //这里给break掉 是为了子进程重复创建子进程 if(pid == 0){ break; } } //第一个子进程原创 2021-01-12 14:01:36 · 508 阅读 · 0 评论 -
c语言-管道-创建匿名管道
创建匿名管道#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h>#include <sys/types.h>#include <sys/原创 2021-01-12 13:56:57 · 832 阅读 · 1 评论