自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(87)
  • 收藏
  • 关注

原创 在回调函数中调用curl_easy_getinfo

在回调函数内部,我们通过 curl_easy_getinfo 获取了 CURLINFO_BYTES_SENT 信息,即已传输的字节数,并打印出来。注意,我们将 CURL * 句柄作为 userp 传递给回调函数,并在 curl_easy_getinfo 中用作第一个参数。如果你想在 CURLOPT_WRITEFUNCTION 对应的回调函数中调用 curl_easy_getinfo,通常是为了获取传输的数据大小、HTTP 状态码等信息。

2024-05-11 14:09:34 169

原创 curl获取文件长度

在回调函数中,你可以通过传入的CURL*指针来获取HTTP响应头信息,从而获取content length(内容长度)。// 这里可以处理下载的数据,userdata可以是一个文件指针或其他用于保存数据的结构体。// 可以将content length保存到userdata中。// 这里的buffer是包含HTTP头信息的缓冲区。// 获取content length的回调函数。// 检查是否包含content-length头。// 解析content length。// 写数据回调函数。

2024-05-11 11:22:49 416

原创 c语言 CURLOPT_HTTPHEADER

c语言 CURLOPT_HTTPHEADER

2024-05-06 14:18:27 319

原创 在CMake中添加编译宏(

cmake

2024-04-26 15:12:54 278

原创 linux 数据链路层 socket编程 广播

在Linux系统中,要进行数据链路层的socket编程,并发送广播包,你可以使用原始套接字(raw socket),并将IP头设置为广播地址。请注意,广播可能受到许多安全限制,并且通常只在局域网内使用。在外部网络上发送广播包可能会被网络管理员禁止或受到限制。此外,正确的以太网类型和其他以太网头部信息需要根据实际网络环境进行设置。这段代码创建了一个原始套接字,并设置了一个用于本地网络的广播地址。然后,它使用sendto函数发送一个字符串作为广播包。

2024-04-12 16:04:07 471

原创 linux c++ 多网卡情况下,如何判断原始套接字接收到的是哪个网卡的数据

在上面的代码中,ihl字段在IP头部中标识了头部的长度,这通常也可以用来区分不同的网卡。为了更准确地识别网卡,你可以使用系统调用getsockopt来获取接收数据的网卡名称,但这通常需要额外的系统调用和复杂的处理。在Linux系统中,使用原始套接字(raw socket)接收网络数据时,可以通过解析IP头部来判断接收到的数据是哪块网卡接收的。请注意,在实际应用中,原始套接字的使用和数据解析需要具备root权限,并且需要小心处理,因为直接接收和处理网络数据可能会影响系统的正常工作。

2024-04-10 15:30:34 393

原创 c++ 通过子网掩码获取ip字符串中的网络地址

这个函数接受两个字符串参数,一个是IP地址,另一个是子网掩码。使用inet_pton函数将字符串形式的IP和子网掩码转换为适合计算的整数形式。然后,通过按位与操作将子网掩码应用于IP地址,以提取网络地址。最后,使用inet_ntop将网络地址转换回字符串形式,并返回。以下是一个简单的函数,它接受一个IP地址字符串和子网掩码字符串,并返回网络地址(也是一个IP地址字符串)。在main函数中,我们提供了IP地址和子网掩码的示例,调用getNetworkAddress函数,并打印输出网络地址。

2024-04-09 19:51:40 190

原创 c++ 根据ip主机号和子网掩码随机生成ip

这段代码定义了一个random_ip函数,它接受一个基础IP地址和子网掩码,然后生成一个随机的IP地址。在主函数中,我们设置了基础IP地址和子网掩码,并调用random_ip函数生成随机IP地址,最后输出这个地址。请注意,生成的IP地址将位于与子网掩码匹配的相同网络号内,但主机号将是随机的。如果需要生成完全符合子网掩码规则的IP地址(例如,在一个C类子网中的随机地址),则需要更复杂的逻辑来确保生成的IP地址不会超出子网范围。在C++中,可以使用以下方法根据给定的IP地址和子网掩码来随机生成IP地址。

2024-04-09 16:59:13 409

原创 字符串地址转换为sockaddr_in

注意:inet_pton函数用于处理IPv4和IPv6地址,而inet_ntoa函数用于将in_addr结构体转换回点分十进制字符串形式。这段代码定义了一个str_to_sockaddr_in函数,它接受一个字符串形式的IP地址和一个整型的端口号,然后将它们转换为sockaddr_in结构体。在main函数中,我们调用这个函数并打印出转换结果。printf(“转换成功: IP=%s, Port=%d\n”, inet_ntoa(addr.sin_addr), ntohs(addr.sin_port));

2024-04-09 14:55:31 335

原创 cmake执行时指定参数

cmake

2024-04-07 10:59:50 495

原创 cmake 条件判断

cmake使用

2024-04-07 10:19:48 319

原创 cmake 怎么给CMAKE_TOOLCHAIN_FILE赋值

在使用CMake时,可以通过命令行参数-DCMAKE_TOOLCHAIN_FILE=来为CMAKE_TOOLCHAIN_FILE变量赋值。这个参数指定了一个CMake脚本,该脚本包含了特定交叉编译工具链的设置。例如,如果你有一个名为toolchain.cmake的文件,并且它位于当前目录,你可以使用以下命令来调用CMake:如果文件位于不同的目录,你需要提供完整的路径:在toolchain.cmake文件中,你可以设置交叉编译工具链相关的变量,如编译器路径、链接器路径、目标操作系统、架构等。

2024-04-03 17:47:48 345

原创 c++ string怎么copy固定长度的数据

/ 想要复制的长度。

2024-03-21 20:00:36 278

原创 cmake怎么打印INCLUDE_DIRECTORIES

注意:在CMake中,INCLUDE_DIRECTORIES命令不仅仅是添加头文件的搜索路径,它还会影响到后续使用find_package的行为。因此,在使用find_package之前调用INCLUDE_DIRECTORIES可能会改变find_package的搜索结果。在CMake中,INCLUDE_DIRECTORIES命令用于指定将被所有依赖于它的targets的头文件搜索路径。这将打印出所有的Makefile命令,包括所有的头文件路径。这将打印出指定目标的包含路径。

2024-03-21 15:52:59 494

原创 write文件描述符阻塞与非阻塞区别

找write非阻塞代码1(这文章不错,可以转载过来)参考文章:socket阻塞和非阻塞对于阻塞Socket而言,如果发送缓冲区没有空间或者空间不足的话,write操作会直接阻塞住,如果有足够空间,则拷贝所有数据到发送缓冲区,然后返回.对于写操作write,原理和read是类似的,非阻塞socket在发送缓冲区没有空间时会直接返回错误号EWOULDBLOCK,表示没有空间可写数据,如果错误号是别的值,则表明发送失败。如果发送缓冲区中有足够空间或者是不足以拷贝所有待发送数据的空间的话,则拷贝前面N个能

2023-01-27 15:38:27 357 1

原创 configure生成的makefile中工具的版本,可以直接修改为自己使用的版本

configure生成的makefile中工具的版本,可以直接修改为自己使用的版本

2022-09-30 10:04:46 431

转载 互斥锁、自旋锁、读写锁……理清它们的区别和应用

互斥锁、自旋锁、读写锁……理清它们的区别和应用

2022-07-20 10:27:30 262

原创 vectorresize和reverse区别。

填坑

2022-02-13 15:54:16 413

原创 如何提高顺序类容器的删除速度?

例如vector1.iterator_swap 交换两个迭代器所指向的内容(其中一个指向要删除的元素,另外一个指向容器末尾元素)2.交换完成之后,pop_back末尾元素。上述做法算法复杂度为O

2022-02-13 14:17:32 226

原创 cpu消耗

IO操作(文件读写)不消耗cpu,逻辑计算消耗cpu

2022-02-10 09:31:45 509

原创 volatile能否保证longlong类型的原子性。

volatile能否保证longlong类型的原子性。

2022-02-01 07:19:59 446

原创 【无标题】

单链表反转 :头上的拿到写到尾巴上

2022-01-20 21:41:05 261

原创 关系型数据库

各表通过某些共同的值相互关联,所以才叫关系型数据库。

2022-01-12 07:40:04 140

原创 快排-快速排序

2022-01-11 23:06:07 104

原创 直接排序

直接插入排序,从第二个元素起开始,如果后面的元素比前一个大,不需要排序,如果小于前一个,则插入到数组第一个做哨兵,用这个元素和前面的每一个元素循环比较,找到比他大的,插入进去。...

2022-01-11 21:48:01 180

原创 冒泡算法

n个元素,冒泡要冒n-1趟,这里m是第几趟。n-m等于第m趟要比较几次。然后大的跑后面去,小的在前面。

2022-01-11 21:42:06 246

原创 linux为何要挂载-(转载)

原作者:java学习网https://mp.weixin.qq.com/s?src=11&timestamp=1641864581&ver=3551&signature=q8dgQutu8BZWql7sAYf-76JF6q2W3oh5jd-AV46T9Qi9ta576qL7zmE0iNPGo3HKPQT0E3RYVm209xAxeuHeUffc4lr9N9icUZXNt-bQMcE0fA94l*RLjOIF26gAJQ2L&new=1Linux 系统中“一切皆文件”,所有

2022-01-11 09:36:48 551

原创 软链接和硬链接

硬链接:ln 源文件 链接文件hard链接文件和源文件共享同一个inode。inode中会对源文件以及硬链接文件进行计数,删一个减1,删到0时,删除真正的文件内容。l硬链接文件和源文件因为指向同一个inode,因此修改时间大小什么都完全一致。软链接:ln -s 源文件 链接文件软链接文件对应一个新的inode,删掉源文件,则无法访问软链接。...

2022-01-11 09:14:40 338

原创 shared_ptr是否是线程安全的?

等等等…

2022-01-11 08:47:32 183

原创 linux交换分区(swap)

linux交换分区即是linux的SWAP分区 SWAP就是LINUX下的虚拟内存分区,它的作用是在物理内存使用完之后,将磁盘空间(也就是SWAP分区)虚拟成内存来使用.它和Windows系统的交换文件作用类似,但是它是一段连续的磁盘空间,并且对用户不可见。需要注意的是,虽然这个SWAP分区能够作为"虚拟"的内存,但它的速度比物理内存可是慢多了,因此如果需要更快的速度的话,并不能寄厚望于SWAP,最好的办法仍然是加大物理内存.SWAP分区只是临时的解决办法.交换分区(swap)的合理值一般在内存的2 倍左右

2022-01-11 08:46:52 1306

原创 32位linux为啥用户使用内存不能超过3GB

linux32位操作系统将进程的虚拟地址空间作了分配,整个4GB被划分成了2部分,其中操作系统本身用去了一部分,共1GB,剩下的3GB空间都是留给进程使用的。那么从原则上讲,进程最多可以使用3GB的虚拟空间,也就是说整个进程在执行的时候,所有的代码,数据包括通过c语言malloc等方法申请的虚拟空间之和不可以超过3GB。如果使用超过3GB,使用64位处理器即可,虚拟地址空间超级大...

2022-01-09 11:28:53 1109

原创 为啥需要链接

编译的时候A模块不知道B模块接口的地址,所以填了个null,链接的时候,A可以通过B模块的符号表信息,查找到相应接口的地址,填到相应调用位置。符号表是由函数名或者变量名+地址组成。

2022-01-09 10:11:46 165

原创 为何要分页

根据程序的局部性原理,当一个程序在运行时,在某个时间段内,它只是频繁地用到了一小部分数据,也就是说,程序的很多数据其实在一个时间段内都是不会被用到的,人们很自然的想到了更小粒度的内存分割和映射的方法,使得程序的局部性原理得到充分的利用,大大提高了内存的使用率。这种方法就是分页。...

2022-01-08 20:18:02 636

原创 分布式系统-转载

一 分布式系统分布式系统的由来:国内来讲,移动互联网的爆发伴随着分布式系统的突现,移动互联网最大的特点是2(to)c的o2o产品越来越多,这跟传统2B的系统最大区别就是用户量的不同,2C系统的用户量远远要高于2b系统,这就对系统提出了各种各样的高标准,响应时间,性能,灾备,吞吐量等等,各种分布式技术也是为了这些标准而服务。分布式架构的应用:分布式文件系统分布式缓存系统分布式数据库分布式WebService分布式计算举例说明:分布式文件系统: 出名的有 Hadoop 的HDFS ,还有 g

2022-01-07 09:36:12 190

原创 rtcp协议

rtcp协议就是rtp协议的控制协议,像网络拥塞,发了多少包,收了多少包。这些都属于rtcp的范畴。接收端会向发送端发送rtco的数据报,收到rtcp的数据报之后,会将这部分数据报进行计算。计算完之后,就能评估出目前的带宽是多少,现在的流量是否已经到了瓶颈点。到了瓶颈点,我就减少包的发送量。带宽还很多,就增加发包量。...

2022-01-05 09:16:57 667

原创 阿秀那边看到两种判断大小端的方式

2021-12-31 09:21:50 195

原创 rtp报文头

rtp模拟了tcp的一些东西。tcp和rtp都有sequence,都可以通过sequence number对包进行排序,但是和tcp的不同点是rtp每个包加1,第一个包是1,第二个包是2,一直加1,是按包来的,而不是按字节来的,tcp是按字节来的,tcp是流式的。同一帧数据,被拆包了,timestamp是一样的。多方通信的时候,每一个发送者都有一个ssrc,不能冲突,如果两个发送源ssrc一致,可以协商再分配。csrc相当于是混音或者混源,有好几个ssrcPT是payload type,标识这个r.

2021-12-28 21:25:55 565

原创 cmake转载

1.CMake是什么?引用百度的话就是CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,简单的说它就是一个可以用根据不同平台生成对应的编译脚本的工具。2.CMake怎么用?CMake工具使用一个名为CMakeLists.txt 的文件来描述构建过程,可以产生标准的构建文件,如 Unix 的 Makefile 或Windows Visual C++ 的 projects/workspaces 。文件 C

2021-12-25 22:43:11 77

原创 webrtc使用sdp协议详解

会话级描述是全局,只有一个,媒体级描述是多个媒体级描述会覆盖会话级描述。

2021-12-24 21:35:50 898

原创 webrtc媒体协商

sdp信息中包括媒体流,支持的解码器是什么等等。支持哪些流,ssrc是什么。peerconnection create offer,然后setlocalDescrption。(缓存自己的sdp信息)发给对端,对端收到之后setRemoteDescription,保存远端sdp信息,然后create answer,生成sdp信息,自己用setlocal description,自己保存起来,然后发给对端。流媒体服务要制作sdp信息,然后和webrtc客户端通信。流媒体服务器可以使用完整的webrtc库来.

2021-12-24 09:22:12 383

空空如也

空空如也

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

TA关注的人

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