自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(81)
  • 资源 (1)
  • 收藏
  • 关注

翻译 cmake:if

有条件地执行一组命令。概要if(<condition>) <commands>elseif(<condition>) # optional block, can be repeated <commands>else() # optional block <commands>endif()根据下面描述的条件语法计算if子句的条件参数。如果结果为真,则执行If块中的命令。否则,可选的elseif块以相

2021-06-30 23:11:21 1643

翻译 cmake:cmake-commands(7)

脚本命令这些命令总是可用的。while在条件为true时计算一组命令while(<condition>) <commands>endwhile()while和匹配的endwhile()之间的所有命令都将被记录而不被调用。对endwhile()求值后,只要< condition>为true,就会调用记录的命令列表。< condition>具有相同的语法,并使用与if()命令详细描述的相同逻辑进行计算。命令break()和continue

2021-06-30 22:43:51 710

翻译 cmake:cmake-language

组织CMake输入文件以CMake语言写在名为CMakeLists.txt的源文件中,或者以.CMake扩展名结尾的文件中项目中的CMake语言源文件被组织为:Directories (CMakeLists.txt)Scripts (< script>.cmake)Modules (< module>.cmake).Directories当CMake处理一个项目源树时,入口点是顶级源目录中的一个名为CMakeLists.txt的源文件。这个文件可能包含整个构建规

2021-06-30 18:55:02 310 2

翻译 cmake:CheckLanguage

设置项目的名称。概要project(<PROJECT-NAME> [<language-name>...])project(<PROJECT-NAME> [VERSION <major>[.<minor>[.<patch>[.<tweak>]]]] [DESCRIPTION <project-description-string>] [HOMEPAGE_U.

2021-06-30 16:04:56 386

翻译 cmake:cmake-buildsystem

介绍基于cmake的构建系统被组织为一组高级逻辑目标。每个目标对应于一个可执行文件或者库,或者是一个包含自定义命令的自定义目标。目标之间的依赖关系在buildsystem中表示,以确定生成顺序和响应更改的重新生成规则二进制目标可执行文件和库是使用add_executable()和add_library()命令定义的。生成的二进制文件是具有针对目标平台的适当前缀、后缀和扩展名。二进制目标之间的依赖关系使用target_link_libraries()命令表示:add_library(archive a

2021-06-30 16:02:54 880

翻译 cmake:命令行工具cpack

概要cpack [<options>]描述cpack可执行文件是CMake打包程序。它以各种格式生成安装程序和源程序包。对于每个安装程序或包格式,cpack都有一个特定的后端,称为“生成器”。生成器负责生成所需的输入并调用特定的包创建工具。不要将这些安装程序或包生成器与cmake命令的makefile生成器混淆。cpack generators手册中指定了所有支持的生成器。cpack–help命令打印目标平台支持的生成器列表。可以通过CPACK_GENERATOR变量或命令行

2021-06-30 15:01:27 1892

翻译 cmake:命令行工具ctest

概要ctest [<options>]ctest --build-and-test <path-to-source> <path-to-build> --build-generator <generator> [<options>...] [--build-options <opts>...] [--test-command <command> [<args>...]]ctest {

2021-06-30 14:38:30 3281

转载 C/C++编程:reference to non-static member function must be called

主要原因是我使用了函数指针,而函数指针所指函数须得是静态才行错误代码:class Solution {public: string ReverseSentence(string str) { typedef string::const_iterator const_iter; const_iter b = str.begin(); const_iter e = str.end(); string ret; .

2021-06-30 12:28:07 6561

翻译 cmake:命令行工具cmake

概要Generate a Project Buildsystem cmake [<options>] <path-to-source> cmake [<options>] <path-to-existing-build> cmake [<options>] -S <path-to-source> -B <path-to-build>Build a Project cmake --build <dir&gt

2021-06-29 18:29:08 9648

转载 cmake:target_** 中的 PUBLIC,PRIVATE,INTERFACE

target_include_directories():指定目标包含的头文件路径。官方文档target_link_libraries():指定目标链接的库。官方文档target_compile_options():指定目标的编译选项。官方文档目标 由 add_library() 或 add_executable() 生成。这三个指令类似,这里以 target_include_directories() 为例进行讲解。语法一般形式target_link_libraries(<targ.

2021-06-29 16:47:41 2212

翻译 cmake:configure_file的作用

引言此文为:轻松入门cmake系列教程指令语法configure_file(<input> <output> [COPYONLY] [ESCAPE_QUOTES] [@ONLY] [NEWLINE_STYLE [UNIX|DOS|WIN32|LF|CRLF] ])作用官方解释:将文件复制到另一个位置并修改其内容。当然,这里的修改其内容也不是任意地修改,也是遵循一定的规则:将input文件复制到out

2021-06-29 14:11:57 1341

转载 Unix/Linux编程:接口层---以太网

引言这里我们讨论了所有接口要用到的数据结构以及对这个数据结构的初始化。本文中我们将说明以太网设备驱动程序在初始化后是如何接收和传输帧的如果读者对一个驱动程序的源代码感兴趣,Net/3版本中包括很多不同接口的源代码。要想研究接口的技术规范,就要求理解设备专用的命令。下图所示的是Net/3提供的各种驱动程序网络设备驱动程序通过ifnet结构中的7个函数指针来访问。下图列出了指向我们的三个例子驱动程序的入口点只有函数if_output和if_ioctl被经常的调用。而if_init、if_done和i

2021-06-21 23:00:09 1544

转载 Unix/Linux编程:TCP并不总是“可靠”的

TCP是一个可靠的协议。有种说法是“TCP能够保证它所发送的数据的可靠传输”,这不是很恰当。比如对端崩溃时,数据就永远不可能到达对端。那怎么理解这句话呢?可靠性:是什么,不是什么在考虑TCP中可能出现的各种故障模式之前,要弄清楚TCP的可靠性意味着什么。如果TCP不能保证将提交给它的所有数据都传送出去,又能保证什么呢?是向谁保证?如下图所示,数据流从应用程序A通过它所在主机的TCP/IP栈向下传输,经过几台中间路由器,通过应用程序B所在的主机的TCP/IP栈向上传输,最后抵达应用程序B。一个TCP段离

2021-06-21 18:17:26 242

转载 Unix/Linux编程:不要低估TCP的性能&避免重新编写TCP

不要低估TCP的性能TCP是一个复杂的协议,在基本IP数据报的服务基础上添加了可靠性和流量控制功能,而UDP只添加了一个校验和,所以看起来UDP可能要比TCP块一个数量级或者更多。基于这种假设,很多应用程序的程序员都认为只有使用UDP才能获得可接受的性能。在某些情况下,UDP运行的确是比TCP块很多,但并不总是这样的。我们会看到,有时TCP比UDP运行的好得多。问题:为什么以及在什么情况下UDP的性能会大大超过TCP。首先,TCP更加复杂,所以和UDP相比要进行更多的处理。总的来说,这两种协议的

2021-06-21 16:45:08 134

转载 网络:TCP的三次握手

当服务端接收到客户端的 SYN 报文时,会创建一个半连接的对象,然后将其加入到内核的「 SYN 队列」;接着发送 SYN + ACK 给客户端,等待客户端回应 ACK 报文;服务端接收到 ACK 报文后,从「 SYN 队列」取出一个半连接对象,然后创建一个新的连接对象放入到「 Accept 队列」;应用通过调用 accpet() socket 接口,从「 Accept 队列」取出连接对象。不管是半连接队列还是全连接队列,都有最大长度限制,超过限制时,默认情况都会丢弃报文。关于。

2021-06-21 15:32:58 2912

转载 C/C++编程:enable_shared_from_this

enable_shared_from_this是一个类模板,定义于头文件< memory >,其原型为:template< class T > class enable_shared_from_this;std::enable_shared_from_this能让一个对象(假设其名为t,而且已经被一个std::shared_ptr对象pt管理),安全的生成额外的std::shared_ptr实例(假设名为 pt1, pt2, … ) ,它们与pt共享对象t的所有权若一个类T继

2021-06-21 15:03:57 273

转载 Unix/Linux编程:理解私有地址和NAT

RFC1918指定了三块永远不会被分配的保留IP地址。这三个地址块是:10.0.0.0 — 10.255.255.255(前缀10/8)172.16.0.0 — 172.31.255.255(前缀172016/12)192.168.0.0 — 192.168.255.255 (前缀192.168/16)网络使用这三块地址中的任意一块时,网络中的任意一台主机都可以访问此网络中的所有其他主机,而无须担心与全局分配的IP地址相冲突。当然,只要与外部网络没有连接,那分配什么样的地址都是无所谓的如果网络

2021-06-21 12:00:53 320

转载 Unix/Linux编程:理解面向连接和无连接协议之间的区别

网络编程中最基本的概念是面向连接和无连接协议。很显然,如果两台计算机要进行通信,就必须以某种形式“连接起来”,那“无连接通信”又是什么意思呢?答案是:面向连接和无连接都是指协议。也就是说,这些术语指的并不是物理介质本身,而是用来说明如何在物理介质上传输数据的。如果两者的区别于承载数据的物理介质无关,又和什么有关呢?它们的本质区别在于,对无连接协议来说,每个分组的处理都独立于其他所有分组,而对面向连接的协议来说,协议实现则维护与后继分组有关的状态信息无连接协议中的分组被称为数据报,每个分组都是独立寻址,

2021-06-21 11:02:02 194

转载 Unix/Linux编程:Xinu的接口层(链路层)

引用接口层包括在本地网上发送和接收分组的硬件与软件。我们用术语设备驱动程序来表示与硬件以及接口(包括网络接口)通信的软件,网络接口是指在一个特定网络上硬件与设备驱动器之间的接口Net/3接口层试图在网络协议和连接到一个系统的网络设备的驱动器间提供一个与硬件无关的编程接口。这个接口层为所有的设备提供以下支持一套精心设备的接口函数一套标准的统计与控制表示一个与设备无关的存储协议地址的方法一个标准的输出分组的排队方法这里不要求接口层提供可靠的分组传输,仅要求提供最大努力的服务。更高层的协议必须

2021-06-20 15:09:02 694

转载 C/C++编程:原始指针is bad

指向对象的原始指针不推荐使用,尤其当暴露给别的线程时。Observerable应当保存的不是原始的Observer *,而是别的什么东西,能分辨Observer 是否存活。类似的,如果Observer 要在析构函数里解注册,那么subject_的类型也不能是原始的Observerable*有经验的C++程序员也许会想到智能指针。没错,这是正道,但也没那么简单,有些关窍需要注意。这两处直接使用shared_ptr是不行的,会形成循环引用,直接造成资源泄露空悬指针由两个指针p1和p2,指向堆上的同一个

2021-06-18 15:41:16 292

转载 C/C++编程:为什么要引入Observer

一个动态创建的对象是否还活着,光看指针是看不出来的(引用也看不出来)。指针就是指向了一块内存,这块内存上的对象如果已经销毁,那么久不能访问,既然不能访问又如何知道对象的状态呢?换句话说,判断一个指针是不是合法指针没有高效的方法,这时C/C++指针问题的根源(在Java中,一个引用只要不为NULL,它就一定指向有效的对象)(可能原址又创建了一个新的对象)在面向对象的设计中,对象的关系主要有三种:composition、aggregation、association。composition(组合)关系在多线程

2021-06-18 14:52:40 88

转载 C/C++编程:构造线程安全的对象

对象构造要做到线程安全,唯一的要求是在构造期间不要泄露this指针,即:不要再构造函数中注册任何回调也不要在构造函数中把this传给跨线程的对象即便在构造函数的最后一行也不行之所以这样规定,是因为在构造函数执行期间还没有完成初始化,如果this被泄露给了其他对象(其自身创建的子对象除外),那么别的线程有可能访问这个半成品对象,这会造成难以预料的后果:// don't do thisclass Foo : public Observer{public: Foo(Observable * s

2021-06-18 11:31:51 336

转载 C/C++编程:当析构函数遇上多线程

C++要求程序员自己管理对象的声明周期,这在多线程情况下可能会造成麻烦。当一个对象能被多个线程同时看到时,那么对象的销毁时机就会变得模糊不清,可能会出现多竞态条件:当即将析构一个对象时,从何而知此刻是否有别的线程正在执行该对象的成员函数如何保证在执行成员函数期间对象不会被另一个线程被析构在调用某个对象的成员函数之前,如何得知这个对象还活着?它的析构函数会不会碰巧执行到一半解决这些race condition是C++编程面临的基本问题。本文试图以shared_ptr一劳永逸的解决这些问题,减轻C+

2021-06-18 11:19:36 2632

转载 Unix/Linux编程:四种mbuf

网络协议对内核的存储器管理能力提出了很多要求。这些要求包括能方便的可变长缓存,能在缓存头部和尾部添加数据(封装时需要添加首部),能从缓存中移除数据(解封装时要移除首部),并能尽量减少为这些操作所做的数据复制。内核中的存储器管理调度直接关系到联网协议的性能在伯克利联网代码设计中的一个基本概念就是存储器缓存,称作一个 mbuf(“memory buffer”),在整个联网代码中用于存储各种信息。mbuf的主要用途就是保存在进程和网络接口间相互传递的用户数据,但mbuf也用于保存其他各种数据:源与目标地址、插

2021-06-18 09:51:12 1405

转载 Unix/Linux编程:网际协议(IP)的分片和重组

本文详述将外发数据进行分片以及将传入数据报进行重组的软件。由于最终目的站需要把分片的数据报重新组装起来,因此每个应用TCP/IP的计算机必须具有负责重组的程序代码,负责它就不能与互联网上所有的计算机通信协议标准规定,任何实现IP的程序都必须能够将数据片进行分组和重组。事实上,任何网关若连接两个以上的具有不同MTU大小的网络,则经常需要将网络报分片传输。由于设计良好的应用程序会主动生成足够小的、能够直接通过网络传输的数据报,因此主机并不需要经常执行分片任务数据报的分片数据报的分片发生在IP为数据..

2021-06-17 21:36:34 301

转载 网络:网际协议(IP)的选路表和选路算法

路由维护和查找选路软件在理论上可以划分为两组。其中一组由那些用来为数据报选择正确路由的过程组成,另一组由增加、改变或删除路由的过程组成。因为网关必须为自己所处理的每个数据报判定路由,所以路由查找程序代码决定了网关的整体性能。因此,通常将查找程序代码优化,以期达到最高速度。*路由的插入、改变或者删除的速率通常比为数据报选择路由的速率要低得多。计算新路由的程序需要与其他设备通信以建立其可达性。它们在重定向之前花任意长的时间。因此,路由更新过程不需要像查找操作那样被优化。其基本观点是:应当选择能使路由花

2021-06-17 18:02:31 607

转载 Unix/Linux编程:网际协议(IP)软件的总体结构

中心环节从理论上来说,IP是整个协议软件的中心环节。它接收来自网络接口软件传入数据报,同时也接收由上层协议生成的外发数据报。IP在为数据报选择路由后,要么将其发送给一个网络接口,要么将其交给本机的上层协议单从主机的角度来看,IP软件可以分为两个不同的部分考虑:一部分处理输入,另一部分处理输出。输入部分使用IP首部中的PROTO字段来决定应该由上层协议中的哪个模块来接收传入数据报。输出部分使用一张本地选路表来选择外发数据包要送往的下一跳。将IP分隔成输入和输出两部分虽然由直觉上的吸引力,但它使得IP和上

2021-06-17 15:31:46 378

转载 Unix/Linux编程:地址的发现以及绑定(ARP)

引言网络接口层包括为网络硬件服务的设备驱动程序,以及与设备驱动程序相关的用于发送外发分组和接受传入分组的软件。设备驱动程序直接与网络硬件通信,并只能使用网络物理地址发送和接受分组地址转换协议(ARP)软件也是网络接口层。ARP将上层的IP地址与底层的物理地址的下层进行绑定。地址绑定软件形成了只能使用IP地址的上层协议软件与只能使用物理地址的下层设备驱动软件之间的分界线。也就是说,ARP使得高层协议与物理地址完全独立ARP软件维护管理一张地址映射表,用以将IP地址映射为物理地址,但高层协议软件并不直接访

2021-06-16 21:25:32 573

转载 Unix/Linux编程:网络文件系统NFS的概念

远程文件存取和传送很多早期的网络系统提供了文件传送服务,它允许用户把某文件的一个副本从一台机器移到另一台机器上

2021-06-16 15:21:07 475

转载 Unix/Linux编程:Unix文件系统回顾

基本定义从用户的观点来看,Unix定义一个文件包含一个字节序列。理论上,Unix文件可以任意长;在实际中,一个文件的长度是收到物理存储设备空间限制的。Unix文件可以动态的增长,文件系统不能对文件大小进行预定义或者对文件的空间进行预分配。而且,只要应用程序向文件中写入任何数据,文件都会自动增长。从概念上来说,Unix从零开始对文件中的字节进行计数。在任何时候,文件的大小(size)都被定义成它所包含的字节数。Unix文件系统允许用字节数作为基准对文件进行随机存取,它允许应用程序移到文件中的任何位置并对该

2021-06-16 14:46:25 741

转载 Unix/Linux编程:分布式程序的生成(rpcgen的例子)

例子:查找字典为理解rpgen是如何工作的,让我们考虑一个实现简单数据库功能的应用。该数据库提供四个基本操作:初始化:初始化数据化,即清除以前存储的所有值插入:插入一个新的条目删除:删除一个条目查找:寻找某个条目我们假设数据库中每个条目都是单个的单词。因此,该数据库的功能可以看作是一个字典。应用程序插入一组合法的单次,接着使用数据库来检测新单词,以便知道该单词是否在字典中我们假设应用程序的输入一个文本文件,在文件中,每行包含一个单字母的命令,其后跟随者一个单词。下表列出来这些命令,并且给出

2021-06-15 16:28:16 498

转载 Unix/Linux编程:分布式程序的生成(rpcgen的概念)

使用远程过程调用远程过程调用模型是一般性的。程序员可以选择下列方式中的任何一个来使用远程过程模式:只作为一种程序的规约技术。为此,程序员参照RPC模型,将客户和服务器间的所有交互要么指明为过程调用,要么指明为返回。过程的参数指明了客户和服务器间所传递的数据。在设计客户和服务器时,程序员可以忽略过程的结构,但是利用过程的规约来验证最终系统的正确性即作为一种程序的规约由作为程序设计的一种抽象。为实现这种方法,在设计应用程序和通信协议时,要想到远程过程调用。对所设计的通信协议的每个报文,都紧密的对应于远程

2021-06-15 14:09:21 1151

转载 Unix/Linux编程:远程过程调用(RPC)的概念

常规过程调用的概念性模型远程过程调用模型主要来自于传统编程语言中的过程调用机制。过程调用提供了一个抽象,它允许程序员将一个程序划分为一个小的、可管理的、易于理解的片段。过程模型的扩充远程过程调用模型使用了和常规程序一样的过程抽象,只是它允许一个过程的边界跨越两台计算机。在程序可以使用远程过程调用之前,必须加入允许程序与远程过程通信的协议软件...

2021-06-15 10:19:55 1452

转载 Unix/Linux编程:外部数据表示XDR

数据表示每种计算机体系结构都有其各自的数据表示定义。即使两种体系结构支持同样的数据类型,但其表示形式也可能不同。为单台计算机编写程序的程序员不需要考虑数据的表示,因为一台计算机通常只允许有一种表示。然而,程序员创建客户和服务器软件时,它们必须考虑数据表示,因为对于在通信双方间通信信道上发送的所有数据,两端必须就这些数据的确切表示达成一致。如果两台机器上的本地数据表示不同,从一台机器上程序发送给另一端的数据就必须被转换。数据表示的中心议题是软件可移植性。一个极端的情况是,程序员可在每一对客户和服务器中

2021-06-15 10:03:33 843

转载 Unix/Linux编程:网络接口层

网络接口层实际上并不是因特网协议组中的一部分,但是它是数据包从一个设备的网络层传输到另外一个设备的网络层的方法。这个过程能够在网卡的软件驱动程序中控制,也可以在韧体或者专用芯片中控制。这将完成如添加报头准备发送、通过物理媒介实际发送这样一些数据链路功能。另一端,链路层将完成数据帧接收、去除报头并且将接收到的包传到网络层。网络接口层通过如下数据结构来完成与硬件的交互作用...

2021-06-14 17:35:10 518

转载 Unix/Linux编程:应用级网关

在受约束的环境中的客户和服务器一般来讲,对于CS体系架构,计算机的连接在一个单一的同构网络里,传输软件提供必要的端对端连接。但这种直接的、统一的访问权限并非总能获得。对于异构环境来讲,程序必须要满足各种不兼容系统的需求,并且不能依赖于某一种传输协议为任意一对机器提供通信,也不能提供一种能在任意机器上运行的客户或者服务器软件。另外,很多机构都指定了安全措施,这造成了一些连通性问题。比如说防火墙外的一些服务可能不能访问内网内的一些服务使用应用网关需要在受限制的环境中设计客户-服务器交互的程序员,通常依

2021-06-14 16:48:57 476

转载 Unix/Linux编程:运输层和应用层的隧道技术

为什么要在运输层使用隧道技术多协议环境由于网络是经过很多年缓慢发展而来的,而且各厂商纷纷推出自己特有的网络系统,加上TCP/IP并非总是可用的,因此一些大的机构通常会有多组计算机,各使用不同的协议进行通信。此外,为最大程序的减少开销,各机构在采用新技术之前,通常还需要使用旧的网络系统。混用网络技术通常,TCP/IP互联网是由多个主机的集合组成的,而这些主机位于通过路由器(IP网关)互联的一些物理网络上。互联网上所有主机和路由器都必须使用TCP/IP协议。同样,运行其他协议的网络由物理链路和只使用该协

2021-06-14 15:25:21 469

转载 Unix/Linux编程:客户进程的并发

并发的优点服务器使用并发有两个主要的原因:并发可以改善观察到的响应时间,从而改善所有客户的总吞吐量并发可以排除潜在的死锁。其他原因:并发实现使得设计人员易于创建多协议或者多服务的服务器使用多进程实现并发非常灵活,因为这样就可以在多种硬件平台(多处理器/单处理器)上很好的运行由于客户通常在一个时刻只进行一种活动,因此它似乎不能从并发中受益。客户一旦向服务器发送了一个请求,在收到响应之前不能进行起来活动。此外,客户的效率和死锁问题不如服务器那样严重,因为如果一个客户延缓或者停止执行,只有一

2021-06-14 14:33:57 131

转载 Unix/Linux编程:服务器中的预分配机制

引入通常,一个并发的、面向连接的服务器,会为每个来自客户的连接创建一个进程。但是,每个TCP的实现都限制了活动的连接数,并且每个操作系统都限制可用的线程数,当服务器达到其中一个限制时,系统将拒绝其请求更多的资源一般来说,大多数利用传入请求来触发并发性的增长(这也叫做需求驱动,并且认为并发等级随需求增加):因为需求驱动服务器只在需要的时候才使用资源,而且可以处理多个请求而不需要等待一个现有请求被处理完毕,这样就能提供明显低的响应时间(此时,任意时刻的并发等级反映了服务器已经收到,但还未处理完毕的请求数目

2021-06-12 23:08:30 568

转载 Unix/Linux编程:多服务服务器(TCP/UDP)

这里描述了如何构造一个单线程服务器,它使用异步IO在多个连接之间提供表面上的并发性。这里上面了一个多协议服务器如何同时在TCP和UDP传输协议之上提供服务。本文将扩展这些概念,把这些循环和并发服务器的设计思想结合起来合并服务器在大多数情况下,程序员为每个服务设计一个单独的服务器:每个服务器在一个熟知端口上等待,并回答与该端口相关联的服务的请求。因此,一台服务器往往为DAYTIME服务运行一个服务器,而为ECHO服务又运行另一个服务器…一个使用多协议的服务器有助于节约系统资源,并使程序维护更容易。把.

2021-06-11 21:04:56 787

onvif摄像头对接鉴权

对应文章: https://blog.csdn.net/zhizhengguan/article/details/109325688

2022-08-11

空空如也

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

TA关注的人

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