自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 资源 (1)
  • 问答 (1)
  • 收藏
  • 关注

原创 socket实现Udp并发服务器和客户端

Tcp通信&Udp通信Tcp 通信Udp通信面向连接的,可靠数据包传输。对于不稳定的网络层,采取完全弥补的通信方式。 丢包重传。无连接的,不可靠的数据报传递。对于不稳定的网络层,采取完全不弥补的通信方式。 默认还原网络状况稳定:数据流量稳定、速度稳定、顺序稳定不稳定:数据流量不稳定、速度不稳定、顺序不稳定传输速度慢,效率低,开销大传输速度快,效率高,开销小使用场景:数据的完整型要求较高,不追求效率。如大数据传输、文件传输使用场景:对时效性要求较高场合,

2020-07-03 11:17:24 469

原创 多路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 194

原创 多路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 --&gt

2020-07-02 20:32:59 172

原创 多路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 140

原创 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 555

原创 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&gt

2020-06-30 15:47:44 344

原创 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 633

原创 线程同步(四):信号量

参考链接:信号量

2020-06-25 17:06:07 123

原创 线程同步(三):条件变量

一、条件变量

2020-06-25 16:43:57 199

原创 线程同步(二):读写锁

一、读写锁读写锁实际是一种特殊的自旋锁,它把对共享资源的访问者划分成读者和写者,读者只对共享资源进行读访问,写者则需要对共享资源进行写操作。1.特性锁只有一把,“读锁”、“写锁”是加锁的两种方式。“读锁”是读模式下加锁状态,“写锁”是写模式下加锁状态。一个读写锁同时只能有一个写者,可以有多个读者,但读者和写者不能同时访问(读共享,写独占)。写锁优先级高。2.具体情景下读者写者优先级分析现在有两个写者w1,w2;三个读者r1,r2,r3;[ 1 ]r1,r2,r3同时访问,均能获取锁并读

2020-06-25 15:42:16 209

原创 线程同步(一):互斥锁

一、条件变量二、Demo

2020-06-25 12:54:44 763

原创 循环创建多个子线程并使用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 1487

原创 进程间通信(四):信号

一、信号信号特点:1. 简单、不能携带大量信息、满足条件才发送。2. 信号是软件层面上的“中断”。一旦信号产生,无论程序执行到什么位置,必须立即停止运行,处理信号,处理结束,再继续执行后续指令。所有信号的产生及处理全部都是由【内核】完成的。信号相关的概念:产生信号: 1. 按键产生 2. 系统调用产生 3. 软件条件产生 4. 硬件异常产生 5. 命令产生概念: 未决:产生与递达之间状态。 递达:产生并且送达到进程。直接被内核处理掉。 信号处理方式:

2020-06-22 16:26:30 229

原创 进程间通信(三):共享内存映射

一、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 209

原创 进程间通信(二):使用命名管道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 997

原创 进程间通信(一):使用普通管道pipe实现父子、兄弟进程间的通信

一.普通管道的特点1)内核借助环形队列机制,使用内核缓冲区实现2)

2020-06-20 20:02:41 1478

原创 循环创建多个子进程并回收子进程资源

循环创建多个子进程#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 381

原创 孤儿进程、僵尸进程以及守护进程

孤儿进程父进程先于子进程结束,则子进程成为孤儿进程,此时init进程成为该进程的父进程,对进程资源进行回收。僵尸进程进程终止,父进程尚未回收,子进程残留资源(PCB)存放在内核中,变成僵尸进程(理论上所有进程都会经历僵尸态,因为进程的死亡与回收不同步)。僵尸进程无法用kill命令清除,因为kill命令是用来终止进程的,而僵尸进程已经终止了。清理僵尸进程的方法:杀死其父进程,这个时候init进程就会对僵尸进程进行清理。...

2020-06-19 20:23:41 168

原创 xshell连接ubuntu打开vim后界面覆盖一层绿色

问题描述ubuntu vim 界面Xshell vim 界面解决方案我在.vimrc中使用插件snazzy作为配色方案,与xshell冲突,将配色方案改为vim自带的配色方案以后就可以正常显示vim界面了

2020-06-05 14:18:25 500

原创 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 2711 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 2922 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 2123

第三方库文件Qtxlsx压缩包

第三方库Qtxlsx压缩包,可用于Qt导出excel表格,使用时将.pri文件导入项目即可。

2020-06-05

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除