- 博客(68)
- 收藏
- 关注
原创 vmtools 复制本地主机文件到虚拟机中
4.以上三步安装完成后。进入/etc/rc.d/init.d文件夹下,执行./vmware-tools restart命令,如果提示vmhgfs unmount failed。注意:执行umount /mnt 卸载原来的映射,重新执行./vmware-tools restart。2.将vmware自动加载的驱动文件中的.tar.gz copy到/tmp中解压。3.进入解压后的文件夹,执行.pl类型的文件。一路yes直到安装成功。我是read hat 3.10版本,按上述操作执行即可。
2024-07-12 14:33:51 572
原创 shell学习---杂谈
这通常用于将一个命令的输出作为另一个命令的输入,或者将输出保存到文件中。在shell脚本中,()通常用于创建子shell或者用于命令替换。例如,可以使用()来创建子shell,或者用于将命令的输出作为变量的值。在shell脚本中,{} 通常用于表示代码块或者用于扩展变量。例如,可以使用{}来表示代码块,或者用于扩展变量的值。在shell脚本中,. 用于包含其他脚本文件中的代码。在shell脚本中,$ 通常用于引用变量的值。也可以用于获取特殊变量的值,比如$0表示脚本名称,$1表示第一个参数,等等。
2023-12-08 15:55:49 235
原创 组播和广播优缺点及应用场景、代码示例
组播(Multicast)是一种网络通信方式,它允许将数据包同时发送给一组特定的目标主机。组播通过使用特殊的组播地址来标识目标主机组,而不是使用单播地址(点对点通信)或广播地址(发送给所有主机)。
2023-06-27 01:05:08 1848
原创 Linux磁盘分区和文件系统的关系
在Linux系统中,可以使用mount命令将文件系统挂载到指定的目录上,使得该目录下的文件和目录可以访问文件系统中的数据。目录和磁盘分区之间的关系是,磁盘分区上的文件系统可以通过挂载操作与指定的目录进行关联,使得该目录成为文件系统的访问入口。一个磁盘分区可以挂载到一个目录上,也可以挂载到多个目录上,实现数据在不同目录之间的共享和访问。磁盘分区是将物理磁盘划分为多个逻辑部分,而文件系统是在每个分区上创建的逻辑结构,用于组织和管理文件和目录。在挂载之前,目录可以不存在,但需要在挂载前创建好对应的目录。
2023-06-27 00:56:46 1420
原创 操作系统启动
BIOS是基本输入/输出系统(Basic Input/Output System)的缩写,它是计算机系统中的一个固件程序,主要用于初始化硬件设备,检测系统配置和启动操作系统。- BOOT是指启动,它是计算机系统启动过程中的第一步,也是最重要的一步。- 当需要重新启动计算机时,可以使用REBOOT命令将系统重新启动,重新执行BIOS、引导程序和操作系统的启动过程。- REBOOT是指重新启动计算机系统。- 在计算机启动时,BIOS会首先运行,它会检测硬件设备,并加载操作系统的引导程序。
2023-06-13 16:23:32 510
原创 IPMI笔记
Socket API是一组用于网络编程的API,提供了一种标准的、通用的网络编程接口,可以在不同的操作系统和编程语言中使用。需要注意的是,不同的库和工具可能支持的IPMI功能和命令略有不同。是的,CPLD的数字逻辑功能通常指的是输入特定的值,然后根据预定义的逻辑规则对输入进行处理,最终输出特定的结果。请求消息体的长度可以根据具体的请求类型和需要传输的数据而定,可以是0到255字节之间的任意值。例如,获取传感器读数的请求消息体可以为空,而执行重启操作的请求消息体可能需要包含一些参数,例如重启延迟时间等。
2023-06-09 00:47:03 1256
原创 硬件通讯协议:串行通讯、IPMI、IPMB、SMbus、NCSI等
NCSI(Network Controller Sideband Interface)是一种协议,用于管理计算机系统中的网络控制器。它是一种基于硬件的接口,通过在网络控制器和主板之间建立一个辅助通道,实现对网络控制器的管理和监控。NCSI协议定义了一组标准化的命令和数据格式,用于在主机和网络控制器之间进行通信。它可以通过多种物理层接口实现,包括PCI Express、SMBus、I2C等。SMBus(System Management Bus)是一种用于管理计算机系统中硬件设备的串行总线标准。
2023-06-08 22:28:48 8297
原创 Linux管道文件操作popen()和pipe()
管道是一种特殊的文件,可以用于进程间通信。在Linux中,管道可以通过文件描述符实现读写操作。以下是一个简单的示例程序,演示了如何使用管道进行进程间通信。``````在这个示例程序中,首先创建了一个管道,然后创建了一个子进程。在父进程中,关闭了读端,然后向管道中写入了一段数据。在子进程中,关闭了写端,然后从管道中读取数据,并将读取的数据输出到标准输出。需要注意的是,管道是一个有限的缓冲区,如果写入的数据超过了缓冲区的大小,写入操作会被阻塞,直到有足够的空间。
2023-06-07 22:51:59 634
原创 Linux进程和信号
在调用`fork()`函数后,会创建一个新的进程,该进程是原进程的一个副本,包括代码、数据、堆栈等。原进程称为父进程,新进程称为子进程。在`fork()`函数返回后,父进程和子进程都会继续执行下去,但是它们的执行顺序是不确定的。具体来说,操作系统会在父进程和子进程中切换执行,直到它们都执行完毕或被终止。如果子进程执行完毕后直接结束,那么它所占用的资源会被操作系统回收。而父进程则可以通过`wait()`或`waitpid()`等函数等待子进程结束,并获取其退出状态。
2023-06-07 22:51:14 548
原创 open()Linux系统调用函数
它首先使用 `open()` 函数打开源文件和目标文件,然后使用 `read()` 函数从源文件中读取数据到缓冲区中,再使用 `write()` 函数将缓冲区中的数据写入目标文件中。最后,使用 `close()` 函数关闭文件描述符,释放资源。- `open()`:打开文件并返回文件描述符。- `dup2()`:复制一个文件描述符,使其指向同一个文件。- `dup()`:复制一个文件描述符,使其指向同一个文件。- `write()`:向文件描述符中写入数据。- `read()`:从文件描述符中读取数据。
2023-05-25 00:22:34 776
原创 fopen()和open()的区别、errno的使用
使用`errno`的好处是可以标准化错误信息,并且可以提供更多的错误信息。在C语言中,很多函数在出错时会将错误码存储在全局变量`errno`中,这样就可以通过检查`errno`的值来判断函数是否执行成功,以及出错的具体原因。`errno`的使用方法如下:1. 在使用可能出错的函数时,需要先将`errno`的值清零,以便后续检查`errno`的值时不会受到之前的影响。2. 在检查`errno`的值之前,需要先判断函数是否执行成功。
2023-05-22 22:39:55 1520
原创 C语言文件IO
以下是一个使用fopen()、fwrite()、fread()、fscanf()、fprintf()、feof()、fseek()函数操作一个文档的示例代码:```c```
2023-05-22 22:35:23 550
原创 可变参函数、枚举、共用体
在上面的例子中,average()函数接受一个int类型的num参数和省略号(...),表示可以接受不定数量的int类型参数。在函数体内,使用va_list类型的变量valist来访问可变参数列表中的每个参数,并使用va_start()和va_end()函数来初始化和结束可变参数列表的获取。它接受两个参数,第一个参数ap是一个va_list类型的变量,表示可变参数列表的指针;没有返回值,它的作用是结束可变参数列表的获取。va_end()函数的参数是一个va_list类型的变量,它表示可变参数列表的指针。
2023-05-17 01:38:15 292
原创 大端字节序和小端字节序及应用场景
存储和存储是两种不同的数据存储方式,其区别在于对于多字节数据(如整数、浮点数等)的存储顺序不同。小端字节序存储(Little Endian)是指低位字节存储在内存的低地址处,高位字节存储在内存的高地址处。例如,32位整数0x12345678在内存中的存储顺序为0x78 0x56 0x34 0x12。存储(Big Endian)是指高位字节存储在内存的低地址处,低位字节存储在内存的高地址处。例如,32位整数0x12345678在内存中的存储顺序为0x12 0x34 0x56 0x78。
2023-05-17 00:20:30 1886
原创 结构体知识点
这段代码在实际运行中会报错,因为 C++ 中的结构体不支持成员变量的初始化。这样定义的结构体 Example 就可以在创建对象时对成员变量进行初始化了。
2023-05-16 00:24:22 63
原创 位域和字节对齐
位域是一种特殊的结构体成员,它允许将一个字节或多个字节中的每个位作为一个独立的成员来使用。位域的语法形式为:``````其中,type 表示位域成员的类型,可以是 int、unsigned int、signed int 或者 char。member_name 表示位域成员的名称,可以省略。width 表示位域成员所占用的位数,可以是一个常量表达式或者是一个整数常量。
2023-05-16 00:21:28 480
原创 学习的过程中不要想着证明自己
个人的一生是短暂的,一个我们耳熟能详的简单定律可能是一个伟大科学家历经几年乃至一生研究所得,运气好这辈子多总结几个定律已经是极限了。这是我个人的最大弊病,源于从好学生到差生,从自信的到自卑,在自卑中妄求重新找回自信的盲目举措。所以要摆清楚位置,接受一切的客观事实,对于以上历程,这本身也是一种修炼,应该以积极的态度去应对。请接收自己是个凡人,想超越,请虚心向学,不要着急在已经被证明的事情上证明自己导致无尽的精神内耗!我们需要7次的反复才能建立记忆突出,不要认为自己是天才,这是生物学层面的客观事实。
2023-05-14 00:10:26 97
原创 解释语言性能差?异步编程、回调函数、注册表?
可以将一个函数指针作为参数传递给另一个函数,当需要调用回调函数时,可以通过函数指针来调用。例如,以下是一个使用函数指针定义回调函数的例子:```creturn 0;```
2023-05-13 23:32:09 476
原创 js和c++区别
在上述代码中,使用 Wt 框架创建了一个简单的网页,其中包含一个文本控件,用于显示 "Hello, World!需要注意的是,使用 C++ 编写 Web 应用程序需要掌握一定的 Web 开发知识,如 HTTP 协议、HTML、CSS、JavaScript 等。一种常见的方式是使用 C++ 的 Web 框架,如 Wt、CppCMS、Crow 等。这些框架提供了一套完整的工具链,包括 HTTP 服务器、模板引擎、数据库访问等,可以方便地编写 Web 应用程序。
2023-05-13 23:15:09 837
原创 为什么要用数据库存储数据
使用数据库相比于使用文件或Excel存储数据有以下优势:1. 数据库具有更好的数据结构和数据管理能力,可以更方便地进行数据的增删改查操作,支持事务处理和数据的完整性约束。2. 数据库可以支持多用户同时访问和操作同一数据,而文件或Excel则需要通过文件锁等机制来实现。3. 数据库可以支持更高级别的数据查询和分析,如聚合查询、复杂筛选、多表联合查询等,而文件或Excel则需要编写复杂的程序来实现。4. 数据库可以支持数据的备份和恢复,以及数据的迁移和同步,而文件或Excel则需要手动进行备份和复制。
2023-05-13 23:06:23 1784
原创 c和c++变量命名首位是“_”的作用
例如,标准库中的一些函数和变量名字之前加下划线,表示它们是保留的,不能在用户程序中使用。另外,一些宏定义中也会使用下划线前缀,以避免与用户定义的变量名字冲突。在 C 和 C++ 中,变量名字之前加下划线是一种命名约定,用于标识私有变量或保留变量。在上述代码中,私有变量 `_private_var` 的命名使用了下划线前缀,以区分它和公有变量。在上述代码中,变量名字为 `_errno`,表示它是一个保留变量,不能在用户程序中使用。下面是一个 C 的示例代码,演示了保留变量的命名约定:```c。
2023-05-13 23:04:05 1677
原创 管道的作用及应用场景及c代码示例
管道(Pipe)是一种在操作系统中常用的通信机制,用于在不同进程之间传递数据。管道可以看作是一种特殊的文件,它具有读写两个端口,数据从一个端口流入,从另一个端口流出。管道的作用是实现进程间通信,使得不同进程之间可以共享数据和资源。通过管道,一个进程可以将数据传递给另一个进程,从而实现进程之间的协作和协同工作。管道还可以用于实现进程的同步和互斥,避免竞争条件和死锁等问题。
2023-05-13 23:00:14 1596
原创 软件工程学科
2. 软件工程导论:介绍软件工程的基本概念、原则、方法和流程,包括软件开发生命周期、需求分析、设计、编码、测试、维护等。10. 软件工程实践:通过实践项目,学生将在实际项目中应用软件工程的知识和技能,包括需求分析、设计、编码、测试、部署等。4. 数据库系统原理:介绍数据库系统的基本概念和方法,包括关系模型、SQL语言、数据库设计、事务处理、并发控制等。5. 计算机网络:介绍计算机网络的基本概念和方法,包括协议、网络拓扑、路由、传输层协议、应用层协议等。
2023-05-11 14:33:18 451
原创 MCTP协议和NCSI
/ 创建 MCTP 数据包struct mctp_packet* create_mctp_packet(uint16_t message_type, uint32_t message_tag, uint8_t* data, uint16_t length) {上面的代码中,create_mctp_packet() 函数用于创建 MCTP 数据包,parse_mctp_packet() 函数用于解析 MCTP 数据包。MCTP 协议的具体内容比较复杂,包括协议头、消息类型、消息标签、数据等。
2023-05-10 17:00:59 7905 1
原创 函数重载和函数重写
函数重写是指在子类中重新定义父类中已有的函数,函数名、参数列表和返回值类型都必须与父类中的函数相同,但函数体可以不同。函数重写的目的是为了实现多态性,子类可以根据自己的需要重新定义父类中的函数,以适应不同的应用场景。函数重载的目的是为了提高代码的可读性和可维护性,使函数名更加符合实际含义,同时也方便了函数的调用。1. 函数重载是在同一个作用域内,函数名称相同但参数列表不同,而函数重写是在子类中重新定义父类中已有的函数。2. 函数重载的目的是为了提高代码的可读性和可维护性,而函数重写的目的是为了实现多态性。
2023-05-10 14:37:55 567
原创 网络协议有哪些?
不同的网络协议适用于不同的应用场景,例如HTTP协议适用于Web浏览器和Web服务器之间的数据传输,FTP协议适用于文件传输等等。不同的协议具有不同的功能和特点,用户可以根据自己的需求选择合适的协议。10. SSL/TLS(安全套接字层/传输层安全协议):用于在Web浏览器和Web服务器之间进行加密通信,以保证通信的安全性。5. IMAP(互联网邮件访问协议):用于从邮件服务器上接收电子邮件,并提供更多的邮件管理功能。9. SSH(安全外壳协议):用于在计算机之间进行加密通信,以保证通信的安全性。
2023-05-09 01:14:50 4492
原创 网络扫盲:Tcp协议和hettp、https协议、三次握手四次挥手
是一种用于传输超文本的协议,是Web应用程序的基础。HTTP协议使用客户端-服务器模型,客户端发出请求,服务器返回响应。HTTP协议是无状态的,即服务器不会记住之前的请求和响应,每个请求和响应都是独立的。HTTP协议使用TCP作为传输协议,通常使用80端口。HTTP协议的应用场景非常广泛,例如:1. 浏览器访问网页:浏览器向服务器发送HTTP请求,服务器返回HTML文件作为响应,浏览器解析HTML文件并显示网页。
2023-05-09 01:14:25 1204 1
原创 makefile和cmake
使用了规则来生成目标文件和依赖关系,其中 $(OBJ) 表示所有的 .o 文件,$@ 表示目标文件名,$^ 表示所有的依赖文件,$< 表示第一个依赖文件。上面的代码中,$(wildcard *.c) 匹配所有的 .c 文件,$(patsubst %.c, %.o, $(SRC)) 将所有的 .c 文件替换为对应的 .o 文件。其中,target 是生成的目标文件,dependencies 是依赖的文件或目录,command 是生成目标文件的命令。变量的定义格式为:变量名 = 变量值。
2023-05-09 00:54:17 764
原创 图及其应用
在图中,每个节点可以有多个相邻的节点,这些相邻节点通过边连接起来,形成一个图形结构。4. 语义网络:在语义网络中,节点代表概念,边代表概念之间的关系,可以用图来表示概念之间的关联。3. 电路设计:在电路设计中,节点代表电路元件,边代表电路线路,可以用图来描述电路的结构。2. 地图导航:在地图导航中,节点代表地点,边代表路径,可以用图来存储和表示地图信息。1. 社交网络:社交网络是一个典型的图,其中人物是节点,人与人之间的关系是边。1. 创建图:创建一个空的图,可以使用邻接矩阵或邻接表来存储图的信息。
2023-05-09 00:40:18 1047
原创 堆及其应用
堆是一种基于树结构的数据结构,通常用于实现优先队列。堆分为最大堆和最小堆两种类型,最大堆的每个节点的值都大于等于其子节点的值,最小堆则相反,每个节点的值都小于等于其子节点的值。
2023-05-09 00:32:58 1062
原创 加密算法DES、AES
加密算法是一种用于保护数据隐私的技术,它通过对数据进行加密,使得除了拥有解密密钥的人之外,其他人无法读取或修改数据。常见的加密算法有对称加密算法和非对称加密算法。非对称加密算法指加密和解密使用不同密钥的加密算法,常见的非对称加密算法有RSA、DSA等。下面是一个使用RSA非对称加密算法进行加密和解密的例子:```c。对称加密算法指加密和解密使用同一个密钥的加密算法,常见的对称加密算法有DES、AES等。下面是一个使用AES对称加密算法进行加密和解密的例子:```c。
2023-05-09 00:15:52 109
原创 类的继承和多态
由于Circle和Rectangle都是Shape的派生类,并且都实现了getArea()方法,因此在printArea()函数中可以通过Shape引用调用它们的getArea()方法,而不需要知道具体是哪个派生类的实例。当需要对某个类进行扩展或修改时,可以通过继承来创建一个新的派生类,并在派生类中添加新的属性和方法,或者覆盖基类的方法。类的继承是指在一个已有类的基础上,创建一个新的类,新类具有原有类的属性和方法,并且可以在此基础上进行扩展和修改。被继承的类称为基类或父类,继承的类称为派生类或子类。
2023-05-06 01:20:28 192
原创 指针和句柄的区别
在WinMain函数中,我们创建了一个窗口并将它的句柄保存在hwnd变量中。在WndProc函数中,我们使用hwnd句柄访问窗口对象,并通过DrawText函数在窗口中绘制了一段文本。在这个程序中,swap函数接受两个指针作为参数,通过指针交换了两个整数变量的值。在main函数中,我们创建了两个整数变量x和y,并通过指针将它们传递给swap函数。指针通常用于动态内存分配、函数参数传递和数据结构的实现等方面,而句柄通常用于Windows编程中,用于访问窗口、菜单、控件等GUI对象。
2023-05-06 01:07:09 139
原创 回调函数与typedef
在上面的示例中,我们使用typedef定义了一个回调函数类型CallbackFunc,它接受两个int类型的参数并返回一个int类型的结果。然后我们定义了一个函数doSomething,它接受三个参数:两个int类型的参数和一个回调函数CallbackFunc类型的参数。在doSomething函数内部,我们调用了回调函数callback,并将结果作为doSomething函数的返回值。在main函数中,我们使用doSomething函数并将addOne函数作为回调函数传递给它。
2023-05-06 00:32:27 391
原创 串行和并行介绍
举个例子,假设有一个需要打印100份文件的任务,如果使用串行方式,就是打印一份文件,等打印完成后再打印下一份文件,这样需要耗费很长时间。再举一个例子,假设有一个需要将图片转换成PDF格式的任务,如果使用串行方式,就是一个一个转换,等一个转换任务完成后再进行下一个转换任务。2. 需要保证任务的顺序性,即必须先完成前一个任务才能进行下一个任务的场景,如编译代码时需要按照文件依赖关系依次编译;3. 任务之间存在依赖关系,后一个任务需要使用前一个任务的输出结果作为输入,如数据处理任务。
2023-05-06 00:12:03 6180
原创 volatile关键字的运用
这样一来,即使我们将flag的值改为false,子线程可能不会立即感知到这个变化,从而导致程序无法正常退出。在上面的代码中,我们定义了一个volatile变量flag,并在一个线程中使用该变量。volatile是一个关键字,用于告诉编译器,该变量可能会在程序的执行过程中被意外地改变,因此编译器不应该进行优化,以确保该变量的值始终是最新的。使用volatile关键字可以保证flag的可见性,即使变量的值在其他线程中被修改,我们也能及时感知到这个变化。1. 防止编译器对变量进行优化,保证变量的值的正确性。
2023-05-06 00:05:50 90
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人