- 博客(28)
- 收藏
- 关注
原创 根据绝对路径的文件名或目录名逐级的创建目录
// pathorfilename:绝对路径的文件名或目录名。// bisfilename:说明pathorfilename的类型,true-pathorfilename是文件名,否则是目录名,缺省值为true。// 返回值:true-创建成功,false-创建失败,如果返回失败,原因有大概有三种情况:1)权限不足; 2)pathorfilename参数不是合法的文件名或目录名;3)磁盘空间不足。bool MKDIR(const char *filename,bool bisfilename){/
2021-03-31 10:57:36 1334
原创 准备测试数据
一.数据的来源 气象数据中心,采集的数据是气象的数据,这些数据有些是模拟的,有些是从网上找的。主要是靠模拟。 做软件开发要熟悉软件的相关业务
2021-03-29 17:36:24 110
原创 生成观测数据
一、大致步骤第一步:将全国的气象站点的地理信息(经度纬度等)从 参数文件中的 stcode.ini 导入容器A因为生成气象观测数据要用到地理信息中的站点编号(站点的标识)/第二步:生成每个气象站点的观测数据,这里主要是模拟的。然后将观测数据导入容器B/第三步:将容器B中的观测数据导入观测数据文件中(data目录下)二、代码#include "freecplus.h"////////////////////////////////////////////////////////////////
2021-03-28 23:00:47 220
原创 封装文件操作类
现在就想对文件操作进行封装,封装成一个类。1.成员变量 现在就来分析一下这个文件操作类,如果要进行封装,那么成员变量有哪些?也就是说凡是涉及到文件操作的就要用到的变量是什么。 首先想到的就是要对谁(哪个文件)进行操作,所以第一个是成员变量就是文件名称。 接着就是,对文件进行操作时,其实我们是对文件指针进行操作,所以第二个成员变量就是,文件指针 对文件进行读写操作,是先将数据读写到缓冲区中。所以第三个成员变量是缓冲区。2.成员函数 成员函数,首先想到的便是构造函数和析构函数。这是
2021-03-25 22:42:29 747
原创 Linux 调用可执行程序
文章目录一、exec函数族1.参数说明2.示例程序2.1 测试 ls 命令2.2 测试客户端可执行程序(编译过的)3.使用execl 常用方法二、system函数1.函数的声明及参数2.示例程序 在C/C++程序中,经常需要调用其它的程序来先成某项任务,例如其它的C/C++程序、操作系统命令或Shell脚本,C/C++提供了exec函数族和system函数来实现这个功能。一、exec函数族 exec函数族提供了一个在进程中启动另一个程序执行的方法。它可以根据指定的文件名或目录名找到可执行文件,并用
2021-03-23 16:16:13 2549 1
原创 Linux 线程同步
文章目录一、线程同步的概念二、互斥锁1、初始化锁2、阻塞加锁3、非阻塞加锁4、解锁5、销毁锁(此时锁必需unlock状态,否则返回EBUSY)三、示例程序1.代码解析2.为什么要加锁呢3.测试加锁与不加锁一、线程同步的概念 在人们的日常生活中的锁大概有两种:一种是不允许访问;另一种是资源忙,同一时间只允许一个使用者占用,其它使用者必须要等待。 1)不允许访问的锁容易理解,就像每家每户的门锁,不允许外人进入。 2)第二种锁,例如火车上的厕所,它是公共的,空闲的时候任何人可以进入,人进去以后
2021-03-23 13:06:14 109
原创 Linux多线程
文章目录一、线程的概念二、线程的使用1、创建线程2、线程的终止3、多线程的socket服务端3.1 测试一个进程多个线程3.2 测试多个线程共享全局变量3.3 需要注意几个问题:三、线程资源的回收四、查看线程五、注意事项一、线程的概念 和多进程相比,多线程是一种比较节省资源的多任务操作方式。启动一个新的进程必须分配给它独立的地址空间,每个进程都有自己的堆栈段和数据段,系统开销比较高,进行数据的传递只能通过进行间通信的方式进行。 在同一个进程中,可以运行多个线程,运行于同一个进程中的多个线程,它们彼
2021-03-22 20:49:19 116
原创 Linux 用信号量给共享内存加锁
前面简单得学习了共享内存和信号量,其中信号量的一个重要作用就是对共享资源的保护,保证共享资源在一个时刻只有一个进程独享。那么现在,就来测试一下。一.测试代码#include <stdio.h>#include <sys/sem.h>#include <string.h>#include <unistd.h>#include <sys/ipc.h>#include <sys/shm.h>#include <err
2021-03-22 13:04:04 2204
原创 Linux 的信号量
文章目录一.信号量的概念二.相关的函数1.包含的头文件2.semget 函数2.1.函数的声明及参数2.2. 示例3.semctl 函数3.1 函数的声明及参数3.2 示例4.semop函数4.1 函数的声明及参数4.2 示例三.示例程序1. 示例程序(book259.cpp)2.测试四.其他的操作命令1.查看系统的信号量2.手工删除信号量一.信号量的概念 信号量(信号灯)本质上是一个计数器,用于协调多个进程(但不包括父子进程)对共享数据对象的读/写。它不以传输数据为目的,主要是用来保护共享资源(共享
2021-03-21 14:58:47 805 2
原创 Linux 共享内存
一.共享内存的概念 共享内存(Shared Memory)就是 允许多个进程访问同一个内存空 间,是在多个进程之间共享和传递数据最高效的方式。操作系统将不同进程之间共享内存安排为同一段物理内存,进程可以将共享内存连接到它们自己的地址空间中,如果 某个进程修改了共享内存中的数据,其它的进程读到的数据也将会改变. 共享内存并未提供锁机制,也就是说,在某一个进程对共享内存的进行读写的时候,不会阻止其它的进程对它的读写。如果要对共享内存的读/写加锁,可以使用信号灯。二.相关函数 Linux中提供了
2021-03-20 20:59:19 294
原创 Linux 的信号 signal
一.让程序在后台运行 在之前的章节中,如果要想程序,在命令提示行下输入程序名后按回车键,程序被运行,然后等待程序运行完成。在程序运行的过程中,也可以用 Ctrl+c 中止它。 在实际中,我们需要让程序在后台运行,没有界面,没有用户输入数据,例如 socket服务端程序。 如果想让程序在后台运行,有两种方法。1.加 “&” 符号让程序在后台运行 如果想让程序在后台运行,执行程序的时候,命令的最后面加“&” 符号。如:./C++封装服务端 5005 & (1)输
2021-03-19 22:30:56 991
原创 Linux 进程之间的通信
文章目录一.进程通信的必要性1.数据传输2.数据传输3.通知事件4.进程控制二.进程通信的方式1.管道2.消息队列(message)3.信号(signal)4.共享内存5.信号量(semaphore)6.套接字(socket)三.注意事项一.进程通信的必要性 进程的数据空间是独立的,私有的,不能互相访问,但是在某些情况下进程之间需要通信来实现某些功能或交换数据。比如1.数据传输 数据传输:一个进程需要将它的数据发送给另一个进程。2.数据传输 共享数据:多个进程想要操作共享数据,一个进程对
2021-03-19 11:07:04 233
原创 Linux 多线程的应用
前面的章节介绍socket通信的时候,socket的服务端在同一时间只能和一个客户端通信,并不是服务端有多忙,而是因为第单进程的程序在同一时间只能做一件事情,不能一边等待客户端的新连接一边与其他 的客户端进行通信。一.并发的服务端 如果把 socket 服务端改为多进程,在每次 accept 到一个客户端的连接后,生成一个子进程,让子进程负责和这个客户端通信,父进程继续 accept 客户端的连接。socket 的服务端在监听新客户端的同时,还可以与多个客户端进行通信。这就是并发,如下图1.
2021-03-18 21:06:05 180
原创 Linux 的多进程
一.进程的概念 什么是进程?进程这个概念是针对系统而言,对于我们来说,我们面对的概念是程序。当输入指令执行一个程序的时候,系统将启动一个进程。 进程顾名思义就是正在进行的程序,或者说是正在运行的程序, Linux 下一个进程在内存中有三部分数据: "代码段“ 、“堆栈段”和“数据段”。1.代码段 代码段就是存放了程序代码2.堆栈段 存放的是程序的返回地址、程序的参数以及程序的局部变量。3.数据段 存放的是程序的全局变量,常数以及动态数据分配的数据空间(比如用 new 函数分配
2021-03-17 23:42:22 742
原创 TCP 报文分包和粘包
1.分包和粘包1.1 分包 发送方发送字符串 “helloworld” ,接收方却接收到了两个字符串 “hello” 和 “world”。1.2 粘包 发送方发送两个字符串 “hello” 和 “world”,接收方却一次性接收到了 “helloworld”。2.TCP是可靠传输 可靠传输能保证数据无差错、无丢失、按序和无重复的交付。 1)顺序不变,例如发送方发送hello,接收方也一定顺序接收到hello,这个是TCP协议承诺的,因此这点成为我们解决分包和粘包问题的关键. 2)
2021-03-15 12:19:52 1516 1
原创 recv() 和 send() 的改进——Write() 和 Readn()
1.recv() 和 send() 的缺点 这recv()函数存在可能读取报文不完整的情况,send()存在可能写入数据不完整的情况。1.1 recv() 函数的改进——Readn()ssize_t recv(int sockefd, void *buf, size_t len, int flage); (1)函数的返回值是这次接收到数据的大小。但是你打算读取1000个字节,只能读取100个(TCP存在分包的问题)。要将数据读取完,需要采用循环多次调用这个函数。所以将这个函数改进为 Readn
2021-03-15 10:33:46 345 1
原创 TCP 的三次握手与连接队列
1.TCP三次握手 左边是客户端,右边是服务端。 TCP的三次握手是底层实现的,不需要调用我们调用什么函数或者代码去做这个过程。2.listen() 的socket 队列 内核会为 listen 状态的 socket 维护两个队列:不完全连接请求队列(SYN_RECV)和等待 accept() 建立的队列(ESTABLISHED)3.listen() 的 backlog 参数(1)函数声明:int listen(int sockfd, int backlog); 在Linux
2021-03-14 23:10:33 332
原创 socket网络通信中的 listen(),connecet() 和 accept()函数
一、listen() 函数1.作用: listen() 函数把主动连接套接字变为被动连接的套接字,使得这个 socket 可以接受其他 socket 的连接请求,从而成为一个服务端的 socket。2.函数声明及参数2.1 函数声明int listen(int sockfd, int backlog);2.2 函数参数 (1)参数 sockfd: 参数sockfd是已经被bind过的socket(这个函数是监听,肯定是先绑定了,才监听)。 socket函数返回的socket是一
2021-03-14 19:36:33 3221
原创 socket通信 bind() 函数详解
一.函数解释1.函数的作用: 服务端用于将把用于通信的地址和端口绑定到 socket 上。所以可以猜出,这个函数的参数应该包含:用于通信的 socket 和服务端的 IP 地址和端口号。ip地址和端口号是放在 socketaddr_in 结构体里面的。2.函数的声明:int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen); (1)参数 sockfd ,需要绑定的socket。 (2)参数 addr ,存放了
2021-03-13 09:23:26 42767 2
原创 socket通信中万恶的结构体
文章目录1.socket通信服务端代码示例2.socket通信客户端代码示例3. 重要结构体3.1struct sockaddr3.2 struct sockaddr_in3.3 struct hostent4.补充一些函数4.1 inet_aton() 函数4.2 inet_ntoa() 函数 socket通信让初学者望而却步的首选socket通信中涉及的结构体,那么下面就啦介绍一下socket通信中涉及的一些重要的结构体。1.socket通信服务端代码示例#include <stdio.h
2021-03-12 22:27:39 860
原创 socket编程中的 htons()
文章目录1.内存存储数据的方式1.1 数据字节序号1.2 小端字节序1.3 大端字节序2. 转换顺序2.1 网络字节序2.2 主机字节序2.3 转换函数 在刚刚接触 socket 时,遇到了 htons() 函数,就直接懵逼了,这是什么东西,有什么用?就查了一些资料。 htons() 是网络字节序与主机字节序之间转换的函数。用生活中的例子来说,有一串数字 12345678 现在我们是从左往右读的,以前的人是从右往左读的。当你要给以前的人读的话就要把这串数据写成 87654321 。htons() 就
2021-03-12 18:09:10 7499
原创 网络编程基础socket通信
一、网络通信socket的概念 socket就是插座的意思,在我们的生活中,插上了就可以接通电源。就像这一盏灯 在计算机网络中socket也称为“套接字”,它描述了计算机的IP地址和端口,运行在计算机中的程序之间采用socket进行数据通信。通信的两端都有socket(两端都要有,这样才能彼此找到对方),它是一个通道,数据在两个socket之间进行传输。 socket把复杂的TCP/IP协议族隐藏在socket接口后面,只要用好socket相关的函数,就可以完成数据通信。二、套接字(s
2021-03-11 17:37:52 1409 2
原创 计算机网络——运输层(来看看,你不会后悔的)
一、运输层简介 一句话概括:怎么将消息从一个主机中的进程传输到另一主机中国的进程,传输的方式有哪些。 前面的内容介绍了将主机通过异构网络互联起来,实现主机到主机的通信。从IP层来说,通信的两端是两个主机。IP数据报的首部明确地标志了这两个主机的IP地址,IP协议虽然能把分组送到目的主机,但是这个分组还停留在主机的网络层而没有交付给主机中的应用进程。但实际上在计算机网络中进行通信的真正实体是通信两端主机中的进程。进程就是正在运行的程序(QQ、微信、迅雷等等都是程序)。传输层负责的就是主机中
2021-03-09 15:47:16 960
原创 计算机网络——网络层与网络互通(挺有趣的)
一、网络层概述 网络层关注的是如何将分组从源主机沿着网络路径送达目的主机。为了将分组送达目的主机,可能沿路要经过许多跳(HOP)中间路由器。为此,网络层必须知道整个网络的拓扑结构,并在拓扑结构中选择适当的转发路径。同时,网络层还要仔细地选择路由器,以避免发生某些链路或路由器负载过重,而其他的链路或路由空闲的情况。因此网络中的每台主机都必须具有网络层功能,而网络层最核心的功能就是分组和转发。1.1 分组转发 当个分组到达某路由器的一条输入链路时,该路由器必须将该分组转发到适当的输出链路。
2021-03-07 22:47:47 1484
原创 计算机网络——数据链路层(你没有见过的表达方式)
一.概述 数据链路层负责通过一条链路从一个结点向另外一个屋里链路直接相连的相邻结点传输数据报。并且是无差错地传输。 这一章节主要讲四个方面: 1.链路层的功能 2.链路层的两种信道 3.局域网、广域网 4.链路层的设备 在正式学习之前先了解一些基本概念 结点:主要指的是主机,路由器。由一根链路连接的两个结点为相邻结点。 链路:从一个结点到相邻结点的一段物理线路。 数据链路:网络中两个结点之间的逻辑通道。因为当需要在一条线路上传输数据时,除了必须有一
2021-03-05 23:25:04 410
原创 计算机网络——物理层(有点意思)
文章目录1.物理层简介2.编码与调制2.1.编码2.2.调制3.信道的极限容量3.1.奈氏准则3.2. 波特率与比特率的互换 上一次已经讲了将计算机网络分层,这一次就来聊一聊物理层。物理层——Physical Layer1.物理层简介 physical 其中的含义就有物质的,实体的,实物的。那在物理层里面的这些实物,物质具体是什么。这些实物就是传输媒体——双绞线、同轴电缆、对称电缆、光缆,以及各种波段的无线信道等。 传输媒体,它的主要作用是用来传输的,那么就可以推出物理层的一个重要的功
2021-03-04 19:26:55 1107 1
原创 计算机网络的主要性能指标
在生活中,经常会听到“我靠,我家的网络太卡了,还是100兆的带宽啊!打个王者都不行”在这里插入图片描述我现在不打算讲为什么卡,只是想要简单地介绍计算机网络中的主要性能指标:速率,带宽,吞吐量,时延,利用率。1.速率 速率就是数据的传送速率,也就是单位时间内传输了多少数据,它也称为数据率或者比特率。 比特是数据的计量单位, 比特——bit,记小写的b所以网络技术中速率的单位是bit/s(比特每秒)。有时写成b/s或者bps(bit per second 简写)。 当数据率
2021-03-03 23:27:56 3594 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人