- 博客(22)
- 资源 (1)
- 问答 (1)
- 收藏
- 关注
原创 socket实现Udp并发服务器和客户端
Tcp通信&Udp通信Tcp 通信Udp通信面向连接的,可靠数据包传输。对于不稳定的网络层,采取完全弥补的通信方式。 丢包重传。无连接的,不可靠的数据报传递。对于不稳定的网络层,采取完全不弥补的通信方式。 默认还原网络状况稳定:数据流量稳定、速度稳定、顺序稳定不稳定:数据流量不稳定、速度不稳定、顺序不稳定传输速度慢,效率低,开销大传输速度快,效率高,开销小使用场景:数据的完整型要求较高,不追求效率。如大数据传输、文件传输使用场景:对时效性要求较高场合,
2020-07-03 11:17:24 510
原创 多路IO转接(三):epoll
一、相关函数说明int epoll_create(int size); 创建一棵监听红黑树 size:创建的红黑树的监听节点数量。(仅供内核参考。) 返回值:指向新创建的红黑树的根节点的 fd。 失败: -1 errno int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event); 操作监听红黑树 epfd:epoll_create 函数的返回值。 epfd op:对该监听红黑数所做的操作。
2020-07-02 20:33:43 237
原创 多路IO转接(二):poll
一、poll函数说明int poll(struct pollfd *fds, nfds_t nfds, int timeout); fds:监听的文件描述符【数组】 struct pollfd { int fd: 待监听的文件描述符 short events: 待监听的文件描述符对应的监听事件 取值:POLLIN、POLLOUT、POLLERR short revnets: 传入时, 给0。如果满足对应事件的话, 返回 非0 -->
2020-07-02 20:32:59 211
原创 多路IO转接(一):select
一、selsect函数说明原理: 借助内核, select 来监听客户端连接、数据通信事件。函数原型:int select(int nfds, fd_set *readfds, fd_set *writefds,fd_set *exceptfds, struct timeval *timeout);其中 fd_set 实际上是一个位图,每一个特定二进制位标志相应文件描述符 nfds:监听的所有文件描述符中,最大文件描述符+1 readfds: 读 文件描述符监听集合。 传入、传出参数
2020-07-02 20:31:49 154
原创 socket实现Tcp多线程并发服务器
代码#include "wrap.h"#include <netinet/in.h>#include <pthread.h>#include <sys/socket.h>#include <unistd.h>#define SERVER_PORT 8000#define MAXLINE 8192struct s_info { //定义一个结构体, 将地址结构跟cfd捆绑 struct sock
2020-06-30 20:03:43 590
原创 socket实现Tcp多进程并发服务器
代码multi_process_server.c#include "wrap.h" //wrap.h将socket,bind,listen等函数进行封装,对返回值进行检测,这里省略具体封装函数的实现,只列出wrap.h中对函数的声明#include <ctype.h>#include <netinet/in.h>#include <stdio.h>#include <sys/socket.h>#include <sys/types.h>
2020-06-30 15:47:44 359
原创 socket实现客户端与服务端之间的Tcp通信
TCP通信流程分析:server: 1. socket(int socket_family, int socket_type, int protocol) 创建socket,返回用于监听的套接字 2. bind(int sockfd, const struct sockaddr *my_addr, socklen_t addrlen) 绑定服务器地址结构(IP+port) 3. listen(fd, 128) 设置监听上限 4. accept(int sockfd, struct socka
2020-06-28 16:31:37 657
原创 线程同步(二):读写锁
一、读写锁读写锁实际是一种特殊的自旋锁,它把对共享资源的访问者划分成读者和写者,读者只对共享资源进行读访问,写者则需要对共享资源进行写操作。1.特性锁只有一把,“读锁”、“写锁”是加锁的两种方式。“读锁”是读模式下加锁状态,“写锁”是写模式下加锁状态。一个读写锁同时只能有一个写者,可以有多个读者,但读者和写者不能同时访问(读共享,写独占)。写锁优先级高。2.具体情景下读者写者优先级分析现在有两个写者w1,w2;三个读者r1,r2,r3;[ 1 ]r1,r2,r3同时访问,均能获取锁并读
2020-06-25 15:42:16 241
原创 循环创建多个子线程并使用pthread_join函数回收
Demo#include <stdio.h>#include <stdlib.h>#include <pthread.h>#include <unistd.h>#include <sys/wait.h>#include <string.h>#include <errno.h>struct thrd{ int var; char str[256];};void sys_err(const
2020-06-23 13:09:14 1586
原创 进程间通信(四):信号
一、信号信号特点:1. 简单、不能携带大量信息、满足条件才发送。2. 信号是软件层面上的“中断”。一旦信号产生,无论程序执行到什么位置,必须立即停止运行,处理信号,处理结束,再继续执行后续指令。所有信号的产生及处理全部都是由【内核】完成的。信号相关的概念:产生信号: 1. 按键产生 2. 系统调用产生 3. 软件条件产生 4. 硬件异常产生 5. 命令产生概念: 未决:产生与递达之间状态。 递达:产生并且送达到进程。直接被内核处理掉。 信号处理方式:
2020-06-22 16:26:30 269
原创 进程间通信(三):共享内存映射
一、mmap函数函数原型void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);参数: addr: 指定映射区的首地址。通常传NULL,表示让系统自动分配 length:共享内存映射区的大小。(<= 文件的实际大小) prot: 共享内存映射区的读写属性。PROT_READ、PROT_WRITE、PROT_READ|PROT_WRITE flags: 标注共享内存的共享属性
2020-06-21 17:47:47 227
原创 进程间通信(二):使用命名管道fifo实现非血缘关系进程的通信
一、命名管道fifo特点命名管道fifo可用于无血缘关系的进程间通信创建方式有两种:1)mkfifo命令2)mkfifo函数,函数原型如下int mkfifo(const char *pathname, mode_t mode);读端打开:open(fifoname, O_RDONLY)写端打开:open(fifoname, O_WRONLY)二、无血缘关系的进程间通信1.写端#include <stdio.h>#include <fcntl.h>#inc
2020-06-20 21:43:23 1062
原创 循环创建多个子进程并回收子进程资源
循环创建多个子进程#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <sys/wait.h>#include <unistd.h>#include <pthread.h>int main(int argc, char *argv[]){ int i; pid_t pid, wpid, tpid; for(i=
2020-06-19 23:58:31 414
原创 孤儿进程、僵尸进程以及守护进程
孤儿进程父进程先于子进程结束,则子进程成为孤儿进程,此时init进程成为该进程的父进程,对进程资源进行回收。僵尸进程进程终止,父进程尚未回收,子进程残留资源(PCB)存放在内核中,变成僵尸进程(理论上所有进程都会经历僵尸态,因为进程的死亡与回收不同步)。僵尸进程无法用kill命令清除,因为kill命令是用来终止进程的,而僵尸进程已经终止了。清理僵尸进程的方法:杀死其父进程,这个时候init进程就会对僵尸进程进行清理。...
2020-06-19 20:23:41 186
原创 xshell连接ubuntu打开vim后界面覆盖一层绿色
问题描述ubuntu vim 界面Xshell vim 界面解决方案我在.vimrc中使用插件snazzy作为配色方案,与xshell冲突,将配色方案改为vim自带的配色方案以后就可以正常显示vim界面了
2020-06-05 14:18:25 527
原创 Qt使用第三方库Qtxlsx将数据库的表格导出为Excel
一、运行结果二、实现1.pro文件加入如下语句:QT += sqlinclude(xlsx/qtxlsx.pri)2.代码#include "widget.h"#include "ui_widget.h"#include "xlsxdocument.h"#include "xlsxformat.h"#include "xlsxcellrange.h"#include "xlsxchart.h"#include <QDateTime>#include <QFi
2020-06-05 14:12:56 2924 4
原创 Qt打印数据库中的表格
实现方法连接数据库,用QTableModel显示数据库的表格,然后将表格转为html,然后再进行打印,打印的方法是参考以下链接完成的:Qt中(HTML)实现数据表格打印功能输出主界面打印结果代码qprintermanager.h#ifndef QPRINTERMANAGER_H#define QPRINTERMANAGER_H#include <QObject>#include <QAbstractItemModel>#include <QText
2020-06-03 11:58:56 3136 6
原创 CentOS7配置适合C/C++开发环境的vim
配置过程1.基本的C/C++编译环境安装gcc,g++,gdb,git,cmakeyum -y install gcc gcc-c++ gdb git cmake2.安装配置python3因为在后面安装的vim插件需要python3支持参考链接:https://www.cnblogs.com/xiujin/p/11477419.html#安装相应编译工具yum -y groupinstall "Development tools"yum -y install zlib-devel bzi
2020-06-02 22:44:52 2362
关于opencv回调函数形参的问题
2019-12-09
TA创建的收藏夹 TA关注的收藏夹
TA关注的人