
Linux与C++
文章平均质量分 70
基础
罗古洞的女婿
保持热情
展开
-
笔试题------查找积分对
有关整除,倍数等问题可以试试转化成余数来做。这是一道华为的笔试题。本答案仅供参考。#include<bits/stdc++.h>using namespace std;// 计算余数数组,如果配对能成,则两数余数相加一定等于average或0int main(){ int average, N; // 历史平均得分和人数 cin>>average>>N; N = N * 2; // cout<&l..原创 2021-09-15 22:47:35 · 474 阅读 · 1 评论 -
C++11智能指针
一、动态内存之内存泄漏与野指针C++中一般用new和delete这一对运算符来进行动态内存管理。动态内存使用时很容易出现两中问题,即内存泄漏与野指针。此外关于new还有一些很有趣的点,new也可以分配const常量对象,其返回一个常量指针。当自由空间耗尽的时候,new分配空间将会失败,默认情况抛出一个类型为bad_alloc的异常,但是可以用定位new(定位new表达式允许我们向new传递额外的参数)来改变这种行为,使得分配失败的时候返回一个空指针。另外还需要注意delete掉一个指针之后要将重原创 2021-07-30 11:36:51 · 1619 阅读 · 0 评论 -
C++右值引用
右值引用就是必须绑定到右值的引用,通过&&而不是&来获得右值引用,右值引用有一个重要的性质,只能绑定到一个将要销毁的对象。 首先明确一下,左值和右值是表达式的属性,所有的表达式要么是左值,要么是右值,但是左值可以当作右值使用。左值持久,右值短暂,即左值有持久的状态,而右值要么是字面值常量要么是表达式求值过程中创建的临时量。左值是有名字的对象,可以取地址(这里字符串字面值是个例外,虽然它是左值,但是好像不能取地址),右值是没有名字的对象,也不能取地址,...原创 2021-07-27 23:02:35 · 203 阅读 · 0 评论 -
C++中析构函数为什么要设置成虚函数?
因为在实现多态的时候,要用基类的指针操作派生类,当释放基类指针的时候,如果析构函数不是虚函数,那么将只析构基类,而不析构派生类,这显然是不正确的。另外需要注意虚继承跟虚函数是两个完全无关的概念,一个是为了解决多重继承的问题,一个是为了实现多态。...原创 2021-07-27 19:49:28 · 309 阅读 · 0 评论 -
C++中的const限定符
一、const概述const可以用来修饰变量或函数,当用const修饰变量的时候,被修饰的变量就称为常量,同理,被const修饰的函数称为常函数。原创 2021-07-27 18:11:00 · 494 阅读 · 0 评论 -
IO多路复用
1 几种IO工作模式(1)阻塞等待阻塞的时候不占用CPU时间片。意思是当有连接请求的时候再唤醒服务端。如果只有一个连接请求这种方式尚可,如果有多个的话,同一时刻只能处理一个,解决方法是主进程或者主线程只负责阻塞等待,一旦收到连接请求就用子进程或者多线程的方式去处理该连接。2 非阻塞,忙轮询优点是提高了程序的执行效率(执行起来更快?而阻塞等待的方式用多进程或者多线程创建进程线程都是需要时间的)缺点是需要占用更多的cpu和系统资源忙轮询处理多个连接请求也不合适,因为也原创 2021-07-09 17:23:49 · 451 阅读 · 0 评论 -
C++static关键字
参考自黑马程序员C语言基础(第七天)内存管理_Dontla的博客-优快云博客1 作用域变量或函数的可见范围,一共有三种作用域:(1)代码块作用域,即 {} 围起来的一块作用域。(2)函数作用域,即函数中的局部变量。(3)文件作用域,即一个.cpp文件2 局部变量定义在 {} 中定义的变量就是局部变量。作用域其只在 {} 内部有效。生命周期只有当执行到定义这个变量的语句时,系统才会给这个变量分配空间。如果没有赋初值,则随机初始化。当执行到离开 {} 时原创 2021-07-04 23:02:44 · 301 阅读 · 1 评论 -
全局变量errno
当UNIX系统调用函数出错时,通常会返回-1(或nullptr),同时设置errno。errno相当于一个系统维护的全局变量,当系统函数出错时errno的值记录了出错的原因。errno在<errno.h>中定义。errno大概有15中不同取值(文件不存在错误,权限问题等)。C标准中errno就是一个宏。errno两条标准:一:如果没有出错,其值不会被函数清除,即还停留在上一次函数出错时候的值。因此只有当我们通过返回值确定函数出错了,才有必要去看一下errno的值。二:er原创 2021-06-23 11:09:08 · 543 阅读 · 0 评论 -
原始系统数据类型
比如创建新进程时候pid_t = fork();生成的进程ID用的是pid_t类型来接收的。这是POSIX中的新规定,UNIX早期版本规定此函数返回一整型。此外还有ssize_t类型,size_t类型等。这种以 _t 结尾的数据类型被称为原始系统数据类型。它们通常在头文件<sys/types.h>中定义(<unistd.h>中已经包含该头文件)。这些原始系统数据类型通常是用typedef来定义的一些基本数据类型的别名,目的是为了代码的可移植性。比如如原创 2021-06-23 10:29:31 · 240 阅读 · 0 评论 -
void * 指针
我们知道,指针变量是复合型变量,其有两重含义,一个地址,二是类型。比如int i;int *p = &i;p存放的是变量i的地址,因为int型变量在32位系统中占4个字节,所以其实p中存储的是i的第一个字节的地址。但是解引用的时候,因为我们已知i占了4个字节,所以可以从第一个字节的地址挨个往后数,数够4个,正好可以把i取出来。因为不同类型的指针变量其对应类型不同,占用地址空间不同,因此一般不能相互赋值。void * 指针只有一重含义,即地址,其没有类型的概念,因此void*只是记原创 2021-06-23 09:44:20 · 263 阅读 · 0 评论 -
线程同步
1 同步的概念这里同步的概念是“协同”的意思,是为了协调步调,让进程/线程按预定的次序运行。即“同步”的目的,是为了原创 2021-06-20 22:52:47 · 394 阅读 · 1 评论 -
进程与线程
1 基本概念进程是操作系统资源分配的基本单位,线程是任务调度和执行的基本单位。线性LWP:light weight process,即线程就是轻量级的进程,在linuxhuan'jin原创 2021-06-17 18:02:56 · 144 阅读 · 2 评论 -
库函数与Linux系统API
1 文件IOopen() close() read() write() lseek()等系统调用函数的使用,在Linux系统调用函数里都是使用文件描述符来操作文件,只有在用o'p原创 2021-06-13 22:17:10 · 381 阅读 · 0 评论 -
Linux虚拟文件系统(VFS)
1 虚拟文件系统概述Linux中“一切皆文件”,所有文件都放置在以 “/” 为根目录的一个目录树中。所有的硬件设备也都是文件,各有自己的yi'ta原创 2021-06-12 22:02:40 · 1952 阅读 · 2 评论 -
动态库制作与使用
1 动态库概念静态库中函数生成的目标代码直接嵌入了最终的目标文件中,而动态库是在用到库中函数的时候才临时把动态库文件加载到进程虚拟地址空间中的共享库区域。如下图所示,在yong'y...原创 2021-06-08 17:28:25 · 499 阅读 · 0 评论 -
静态库制作与使用
1 静态库概念其实库的概念。就是把一系列函数封装在一个二进制文件中,这一系列的函数的声明可以放在一个头文件中,写代码的时候直接包含头文件然后就可以直接使用库中的函数。在编译的时候要指定k...原创 2021-06-08 15:58:53 · 738 阅读 · 0 评论 -
GCC编译代码
原创 2021-06-08 15:27:34 · 158 阅读 · 0 评论 -
Linux环境变量
概念本质上是字符串变量,只不过变量名都是大写字母。所有环境变量一起用来指定操作系统运行环境下的一些参数。原创 2021-06-08 15:15:33 · 112 阅读 · 0 评论 -
socket编程步骤
服务器端#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <sys/types.h>#include <sys/stat.h>#include <string.h>#include <sys/socket.h>#include <arpa/inet.h>#include <ctype.h>int原创 2021-06-04 19:46:02 · 2141 阅读 · 0 评论 -
数组与指针
一、数组C语言中的数组是存储在一块连续的内存空间之中的多个相同类型的变量。也就是说,即便是二维数组在进程的虚拟地址空间中的地址也是连续的原创 2021-05-29 22:42:43 · 3546 阅读 · 0 评论 -
进程间通信IPC(二)信号
1 信号的概念也是一种进程间通信方式特点:简单,携带信息量小,满足某个特定条件才发送信号机制:A进程给B进程发送信号,B收到信号之前执行自己的代码,收到信号后,不管执行到程序的什么位置,都要暂停执行去处理信号,处理完毕再继续执行。处理信号可以是忽略信号,或者捕获信号待会处理,或者马上去处理。信号是软件层面实现的中断,早期被称为“软中断”。需要注意的是,虽然说是由进程A发送信号给进程B,但所有信号,都是由内核发送,内核处理。信号特质:由于信号通过软件方法实现,其实现手段导致信号有很原创 2021-05-25 18:45:10 · 872 阅读 · 0 评论 -
进程间通信IPC(一)pipe fifo mmap
1 概念虚拟内存技术实现了进程间的隔离,但是有时候需要进行进程间的通信,因为不同进程的虚拟地址空间中内核态的部分是所有进程共享的,因此可以通过内核提供的缓冲区进行数据交换。注意这里的pipe管道与linux的管道命令 | 不一样, | 是将前边命令的标准输出作为后边命令的标准输入。但本质上,管道命令 | 可以由管道通信实现,前边命令对应的进程将内容写到缓冲区,后边命令对应的进程将内容读出来再写到终端就实现了管道命令2 pipe管道通信pipe系统api定义,unistd.h是unix系统原创 2021-05-22 23:28:11 · 365 阅读 · 0 评论 -
孤儿进程与僵尸进程
孤儿进程:父进程先死了,子进程被init进程领养,即子进程的父进程pid变成了1这个子进程就叫孤儿进程僵尸进程:子进程死了,但是父进程没有回收子进程的资源(子进程的资源必须由父进程回收,操作系统不会自动回收)...原创 2021-05-21 18:20:54 · 173 阅读 · 0 评论 -
Linux常用命令
history返回命令历史记录linux文件类型其中符号链接就是软链接,而普通文件可以看成是硬链接通配符* 任意多个字符?一个字符目录相关操作ls:查看目录ls -a: 查看包括隐藏文件ls -l: 查看目录中文件的详细信息ls -R: 递归查看目录,即同时查看子目录中的文件ls -lrt & ls -lt: 按时间顺序查看目录中文件,rt和t返回结果是逆序的cd - 回到上一级目录cd $HOME 回到家...原创 2021-05-19 20:23:46 · 151 阅读 · 0 评论 -
shell、终端与内核
内核:是硬件系统上的第一层系统软件,是操作系统的核心,提供操作系统最基本的功能,负责管理内存,进程,设备驱动,文件和网络系统内核是操作系统常驻内存的部分现代操作系统设计中,为减少系统本身的开销,往往将一些与硬件紧密相关的(如中断处理程序、设备驱动程序等)、基本的、公共的、运行频率较高的模块(如时钟管理、进程调度等)以及关键性数据结构独立开来,使之常驻内存,并对他们进行保护。通常把这一部分称之为操作系统的内核。shell:顾名思义是“外壳”,是操作系统内核的外壳,负责外界与操作系统内核的交原创 2021-04-30 10:33:47 · 405 阅读 · 0 评论 -
exec函数族
1. exec函数族介绍fork()函数可以用来创建子进程,但是子进程执行的是和父进程相同的程序,或者说执行父进程程序的一部分,或者父进程与子进程执行不同的代码分支,但总归是跟父进程关系很大的程序。但我们创建子进程的目的往往是要让进程执行新的程序才行,这个时候就需要用到exec函数族。当进程调用一种exec函数时,该进程用户空间的代码和数据会被新程序完全替代,然后从新程序的第一行代码开始执行,中间只要不出现错误就不会返回到原程序的代码,如果出现错误则返回到原程序中调用exec函数的下一行继续执行。原创 2021-04-29 16:52:13 · 1268 阅读 · 0 评论 -
fork()创建子进程与IO缓冲区
1. IO缓冲区cout<<"hello"<<endl;cout<<"hello";while(1){}因为关联到终端的IO流对象一般都是行缓冲的,因此上述代码第一个hello会被输出出来,而第二个hello因为没有endl强制刷新,因此会留在缓冲区内等待缓冲区填满或者显式刷新缓冲区,才能输出2. fork()子进程与IO缓冲区cout<<"hello chk"; // cout<<flush;pid_t p.原创 2021-04-29 11:06:23 · 380 阅读 · 1 评论