- 博客(62)
- 收藏
- 关注
原创 怎样在自己写的shell中添加重定向原理 ?(详细 ! ! ! ! !)
shell实现重定向原理前提:代码的实现:实现步骤1. 在步骤键盘输入的时候查看是否有重定向的符号2.对子进程标准输出进行重定向或文件的信息不会随着程序的替换被消失前提:之前我写了一篇博客简单介绍了重定向的基本原理,大家先了解重定向的基本概念:重定义基本概念只要你理解了重定向的基本原理,剩下的就好解决多了,只要将之前写好的xshell中加上重定向的操作就好了.实现简单xshell链接代码的实现:我先将代码给出,然后对于代码的内容进行解释,这样比较直观一点.#include <stdio.h
2021-03-31 19:23:34 183
原创 怎样理解在C++11新出来的emplace函数 ? ?(干货 ! ! !)
C++11 emplace1.emplace2.emplace_back这是C++11新增的一个函数,其实和insert的利用有相似的地方,下面我们来做具体的解释1.emplace可以利用迭代器来自己控制要插入的位置struct A{ explicit A(int a, int b) //这里被explicit,故不能发生隐式类型转换 :_a(a) , _b(b) {} private: int _a; int _b; }; vector<A>v.
2021-03-31 16:15:44 493 1
原创 怎样vector内部的Modifiers(功能)进行实现 ?(详细 ! ! !)
vector5Modifiers(功能实现)1.assign1)通过输入对应元素来改变2) 通过迭代器来改变2.push_back3.pop_back4.insert1)插入单个字符2)插入多个3)插入对应范围内的字符串5.erase1)删除对应位置的字符2)删除范围内的字符串Modifiers(功能实现)这里主要涉及的就是对于单个元素的操作,主要理解和熟练使用这些操作的作用.1.assign1)通过输入对应元素来改变用来改变对应vector内部的空间元素值和空间内字节的大小 string.
2021-03-31 15:57:52 103
原创 怎样实现对vector类里面的元素进行访问???(干货 ! ! !)
vector4Element access(元素的访问)1.operator[ ]2.at3.dataElement access(元素的访问)我们在这里具体介绍三个主要的接口,剩下的大家主要用来自己编写,比较简单.1.operator[ ]主要就是利用operator[ ]将内部的值包含进来方便输出和改变其中的值.1)输出方式 string str = "1234567890"; vector<char>v(str.begin(), str.end()); for (si.
2021-03-31 14:34:55 915
原创 怎样使用vector的Capacity接口?(详细 ! ! ! !)
vector3Capacity(内存容量)1.size2.max_size3.resize4.capacity5.reserve6.shrink_to_fitCapacity(内存容量)1.size用来看内部有多少个字节struct A{ A(int a = 1, int b = 2) :_a(a) , _b(b) {} int _a = 1; int _b = 2; }; vector<char>v1; //变量的创建 vector<int.
2021-03-30 18:52:49 231
原创 怎样使用vector内部的迭代器?(干货 ! ! ! 详细 ! !)
vector2Iterators(迭代器)1.begin/end2.rbegin/rend3.cbegin/cend4.crbegin/crendIterators(迭代器)对于vector内部的迭代器其实就是一个可以指向vector首尾的一个接口,学会调用其接口就可以了.1.begin/endbegin是指向首元素位置end是指向最后一个元素后面的位置的数据 string str("1234567890"); //在上一篇博客中讲到关于vector的创建 vector<cha.
2021-03-30 18:14:11 314
原创 怎样简单的创建一个vector类?(干货 ! ! !详细 ! ! ! ! !)
Vector接口介绍一.Member functions(创建)1.建立空vector2.建立内置类型vector3.建立自定义类型vector4.数组方式建立(赋值)5.迭代器方式建立二.Iterators(迭代器)三.Capacity(内存容量)四.Element access(元素的访问)五.Modifiers(功能实现)一.Member functions(创建)1.建立空vector2.建立内置类型vector3.建立自定义类型vector4.数组方式建立(赋值)5.迭代器方式建立.
2021-03-30 16:42:25 3586
原创 自己来实现一个String类?干货!!!!详细!!!!(补充)
实现String类的补充一.insert1.插入字符2.插入字符串二.erase三.find1.寻找对应字符数的位置2.寻找对应的字符串的位置四.选取字符串中的子串五.赋值运符补充operator >>operator <<这里对于String类的具体补充是让我们更加完善这个接口,在上一篇博客中 点击此处就是一个简单的手撕String,这里是补充,让我们对于String类的理解更加的深刻.一.insert1.插入字符比较简单,就是要对于其后面的元素进行后移的操作,复杂度比较.
2021-03-28 15:50:56 281
原创 文件流指针和文件描述符之间的关系(干货!!!!!)
文件描述符的文件流指针的具体区别主要理解两者之间的区别,其实就是和封装有关的,大家具体看其中的内容.
2021-03-27 20:46:38 138
原创 对于文件描述符的理解(简单易懂!!!)
文件描述符我们在之前的时候讲过什么是进程,讲到pcb哪里的时候算是对于文件描述符的一个引入,让我们来具体的解释一下,要看之前的点击此处 这里的对应的0 1 2 3 这个结构体里面的下标就叫做文件描述符 ...
2021-03-27 19:57:11 140
原创 教你简单的理解-重定向原理(详细!!!!!干货!!!!!)
重定向原理一.我们来先介绍程序的空间内运行的加载方式:二. 函数介绍三.重定向实现四.具体语句解释总结看到这个概念,很多人都不明白重定向原理到底是什么?一.我们来先介绍程序的空间内运行的加载方式:二. 函数介绍dup2函数:将其中对应的程序文件进行交换 int dup2(int oldfd, int newfd); int oldfd : 需要替换的对应下标int newfd : 被替换的对应下标三.重定向实现既然我们已经介绍了这个函数,下面我们就通过代码看一看.四.具体语句.
2021-03-27 15:13:50 1320
原创 对于系统调用IO接口的具体理解(详细!!!!!)
系统调用IO接口目录:1.open2.write3.read4.lseek5.close目录:1.open这里是一个打开文件的操作,且对于被flags的操作我们可以通过或的方式对多个操作进行叠加 int open(const char* pathname,int flags,mode_t mode); 举例:int fd=int open("./test";O_RDWR;0777); 2.write ssize_t write(int fd,const void *buf,.
2021-03-26 11:52:19 154
原创 对于String 类相关接口的补充
Sting类接口的补充目录:1.修改操作erasereplaceswap2.字符串具体操作c_strfindrfindsubstrfind_first_not_of;find_first_of;find_last_not_of;find_last_of;目录:之前对于String类的接口介绍的还不够全,下面我对于String类的接口进行进一步的补充1.修改操作erase----是对于字符串的一个删除操作string& erase (size_t pos = 0, size_t len =
2021-03-25 21:49:15 59
原创 怎样自己实现一个shell?(干货!!!)一定要学会!!!基本原理!!!
实现一个简单的shell目录:shell的概念shell的实现思路讲解1.首先我们在操作Linux的时候,就是要在键盘中输入对应的指令2.解析输入信息-命令名称.运行参数3.创建一个子进程 fork4.等待子进程退出 wait代码实现/具体讲解目录:shell的概念这里我们就要对shell简单的理解一下:shell就是起到让用户对于内核中的内容操作的更加方便的作用!今天我们就要实现一个简单的shell,也就是打印出一个对应的用户,我们对其内部进行操作shell的实现思路讲解我们今天再这.
2021-03-24 16:33:36 2227 1
原创 自己来实现一个String类?干货!!!!详细!!!!
实现String类1.迭代器获取对应元素2.构造函数3.赋值运算符1) =2) [ ]3) [ ]4) +=5) +=6) +=4.析构函数5.相关的操作功能的实现1)pushBack2)reserve3)resize4)append5)print6)String类与String类/字符串/单个字符相加对于如何来实现一个String类,大多数人都会觉得很难,这个时候就有人要问了:其实是很简单的,对于类这一部分的结构,都有着固定的结构,首先我们将一个简单的结构先敲出来,然后将就像在类的外部写函数一样,.
2021-03-24 00:12:23 212
原创 让你熟练掌握内存对齐规则!!!(详细!!!!!)一定要看!!!
内存对齐规则结构体内存对齐是一个比较重要的考点,就是给出一个结构体,你要清楚地说出它利用了多少的内存,因为作为一个cpp程序员,我们对内存的应用应该掌握到极致,能清楚的进行利用,来降低公司的成本.下面是一个比较正式的规则说明:第一个成员在与结构体变量偏移量为0的地址处。其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。结构体总大小为最大对齐数(每个成员变量都有一个对齐数)的整数倍。如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小是所有最大对齐数(含.
2021-03-23 16:31:04 243
原创 怎样实现一个青蛙跳台阶问题?
青蛙跳台问题青蛙跳台阶问题也是一个很简单的题目,主要不要把其思想理解错误就行,我就在这里被一个问题困扰了半天!!如图:这个问题我给出5个台阶时候的表示方法,通过5阶来具体理解这个题目的思想,如图:如果你能看清楚我上面的5阶所写的8种答案,我们就可以直接通过代码来理解了,不需要再说啥了.如下面例题:#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>//====青蛙跳台阶问题int .
2021-03-23 16:23:11 113
原创 strstr函数的具体实现(详细!!!!)干货 !!!!
strstr函数在另外一个字符串里面寻找和原代码中相同的部分,并输出后面所有的值如下面例题:#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>#include <assert.h>//====strstr函数实例(查找)char* my_strstr(const char* dest, const char* src) /.
2021-03-23 00:03:17 748
原创 strcmp函数的具体实现(详细!!!)
strcmp函数主要就是比较两个字符串的大小,如图理解如下面例题:#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>#include <assert.h>//====strcmp函数实例(比较大小)int strcmp(const char* str1, const char* str2){ //当字符相同,则继续向后.
2021-03-22 17:29:41 1135
原创 strcpy函数的自我实现(具体!!!)
strcpy函数合法性校验是防止用户输入了一个不在范围内的值,直接结束,防止代码过长而耗费时间.自定义一个函数,在合法性校验合格的时候进行1对1的传值就可以了.如下面例题:#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>#include <assert.h>//====strcpy函数实例(复制)char* strcp.
2021-03-22 17:22:07 346
原创 判断字符串旋转后是否相等
旋转后是否相等还是主要运用调用函数,判断相等输出1,否则输出0即可,在这个代码里面调用了strlen ;strstr;strncat;的字符串函数,主要还是要对这些函数有一定的熟练度就可以.如下面例题:#define _CRT_SECURE_NO_WARNINGS #include<stdio.h>#include<stdlib.h>#include<assert.h>#include<string.h>#include <stdio..
2021-03-22 17:18:11 217
原创 memcpy函数的实现(干货!!!!!!)
memcpy函数编写相对于来说,这个memcpy函数就行对于来说简单一点,!!将一个数组内部的内容复制到另外一个有足够储存空间的数组内!!,这个简单,直接通过例题来理解.如下面例题:#define _CRT_SECURE_NO_WARNINGS #include<stdio.h>#include<stdlib.h>#include<assert.h>//====memcpy函数实现void* memcpy(void* dest, const void*.
2021-03-22 17:11:51 1334 1
原创 C语言实现猜名词的题目(详细!!!!)
猜名次题目:A选手说:B第二,我第三;B选手说:我第二,E第四;C选手说:我第一,D第二;D选手说:C最后,我第三;E选手说:我第四,A第一;比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。和上面那个例题一致,只不过这个题目表达的是每个人都说对了一半,这里我们就需要将两个值+起来,等于1即可,就能表达出每个人都说对了一般这句话,其他的和上面的题基本一致,多理解就行如下面例题:void swapArgs(int * a, int * b) { //一个简单的交换函数 int.
2021-03-22 16:55:27 330
原创 实现一个猜凶手的应用题解决.
首先:在我看来这种应用题目的解决方式就是将所描述的文字运用逻辑符号用0和1的表达方式进行表达出来,没有别的方法,还是要多对逻辑符号进行运用,熟练熟练,就能准确的写出这种题目.猜凶手题目:A说:不是我。B说:是C。C说:是D。D说:C在胡说已知3个人说了真话,1个人说的是假话。这个题的代码思路很简单,主要就是运用逻辑表达的方式将这个题目表达出来,利用if语句,将ABCD说的话包含进去即可,如下面例题:#include<stdio.h>#include<stdlib.h.
2021-03-22 16:51:07 79
原创 怎样实现一个简单的前n项和?
将一个函数的表达式进行表达例题:Sn=2+22+222+2222+…(运用代码将这个函数表达出来)对于这个例题,主要就是我们要将后面的进行分解出来如22=2+20;222=200+20+2;这样的方式就可以很明显的看出,第二个数就是将第一个数*10再加上同样的数即可不难理解,知道了这个关键点,我们就能理清思路,进行编程.如下面例题:#include<stdio.h>#include<stdlib.h>int main(){ int i = 0; //定义4.
2021-03-22 16:40:01 145
原创 怎样实现进程的替换?
进程替换目录:概念exec函数族int execl(const char *path,const char *arg,...);int execlp(const char *file,const char *arg,...);int execle(const char *path,const char *arg,...,char *const envp[ ]);int execv(const char *path,char *const argv [ ]);int execvp(const char *.
2021-03-22 12:00:11 144 1
原创 阻塞和非阻塞的区别(干货!!!)
阻塞和非阻塞阻塞非阻塞区别阻塞为了完成一个功能,发起一个调用,如果不具备条件的话则一直等待,直到具备条件则完成非阻塞为了完成一个功能,发起一个调用,具备条件直接输出,不具备条件直接报错返回区别其实就相当于在捕捉一个子进程退出的时候,阻塞则会一直等待,直到这个子进程退出,返回对应的值,而非阻塞,如果刚好捕捉到子进程的退出则直接输出,如果没有捕捉到,也不进行等待,直接输出报错!...
2021-03-22 11:29:42 6871 3
原创 怎样实现一个进程的等待?
实现进程的等待目录概念实现函数(1) pid_t wait (int *status)(2) pid_t waitpid (pid_t childpid,int status ,int options)关键字解释进程等待两种转换方式目录概念父进程等待子进程退出,从而获取子进程的返回值,释放其中的资源.从而避免产生僵尸进程!实现过程:1.因为在我们上面讲过的子进程如果先进行退出的时候,父进程如果没有查询到,就会造成僵尸进程,2.所以们可以利用进程的等待,让父进程不进行运行,3.当子进程运行完.
2021-03-22 11:21:17 252
原创 关于进程退出的基本原理
二.进程退出目录三种进程退出的方式1.main函数中调用return2.使用库函数3.使用系统调用接口退出返回值1.正常退出2.异常退出调用错误接口目录三种进程退出的方式1.main函数中调用return这里就是比较简单的做法2.使用库函数void exit(int status)----在任意位置调用都可以退出进程,退出之前会刷新文件缓冲区3.使用系统调用接口void_exit(int status)----在任意位置进行调用都可以进行退出退出返回值对于进程的返回值只利用一个
2021-03-19 16:51:58 244
原创 对于vfork和fork的两种子进程有什么区别?
两种子进程的区别fork子进程vfork子进程fork子进程对于fork的子进程创建,是将虚拟地址空间.页表.pcb进程控制块都进行了复制fork进程是直接进行全部的复制.vfork子进程而对于vfork创建一个子进程只是创建了一个与父进程一致的pcb进程控制块,和父进程一起指向对应的虚拟地址空间vfork的特点:1.创建子进程后对应的父进程会堵塞,直到子进程退出或者是子进程的程序发生替换,父进程才会运行.2.公用同一个虚拟地址空间,如果同时运行会造成栈的混乱3.vfork创建的
2021-03-19 15:28:17 103
原创 对于进程创建的基本原理
一.进程创建目录:进程创建返回值写时拷贝技术目录:进程创建操作:pid_t fork();如图:(就可以简单的创建一个子进程)特点:1.通过复制父进程来创建一个简单的子进程2.父子进程的代码共享,但是他们有自己的数据3.子进程中虽然有和父进程一样的数据,但子进程只拥有其创建以下的访问权限返回值1.对于子进程创建失败后返回值-1.2.父进程完成会返回子进程的pid3.子进程运行完毕返回0写时拷贝技术写时拷贝技术是在创建子进程以后,子进程与父进程各自都拥有自己的虚拟地址块,但是其
2021-03-19 15:01:36 520
原创 实现将一个数的每一位进行求和
求将一个数每一位的数字和对于这个题,我们还是需要运用递归的方式来进行思路:1.当这个数小于10的时候,我们就不需要在进行递归,直接输出就行,2.故我们需要在这个地方用一个if语句进行筛选,3.在大于9的情况下再进行递归.并且再次进行循环的时候要/10,这样就能自动切换到下一位.如下面例题:int DigitSum(int n){ //自定义函数 if (n > 9) return DigitSum(n / 10) + n % 10;.
2021-03-18 18:38:25 796
原创 实现斐波那契数列(干货!!!!)
斐波那契数这个数就是后面的一个数等于前两个数之和,一直循环下去,变得越来越大,所以我们就用递归进行,在return 语句上加上上一个表达出来的函数.如下面例题:#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>int fib(int n){ //自定义函数 if (n == 1){ //因为这个数列在最开始的两个值都为1,所以直接用if语句表示 retu.
2021-03-18 00:43:50 216
原创 输入一个数,打印出其二进制形式有多少个1
输入一个数,求出二进制数位,并合计有多少个1思路:1.调用函数,二进制打印出来2.用这个数的二进制与二进制的1进行依次左移<<一位进行&,相同为1.则count++;并打印出结果,就可以了如下面例题:#define _CRT_SECURE_NO_WARNINGS #include <stdio.h>#include <stdlib.h>int stat(int num){ //创建一个函数 int count = 0;.
2021-03-17 17:13:05 107
原创 将输入的数以二进制分奇偶进行分别打印.
输入一个数,将其以二级制并分奇偶数打印出来对于这个题,也是运用主函数调用一个函数的样子,就可以得出分奇偶打印出来的样子.思想:1.把32个字节依次减2就为偶数,2.当第31个字节依次减2所有的则都为奇数,3.我们再用两个for语句将其进行输出如下面例题:#define _CRT_SECURE_NO_WARNINGS #include <stdio.h>#include <stdlib.h>void Printbit(int num){ //自定义.
2021-03-17 17:03:54 114
原创 怎样将一个数进行分别打印出来?
分别打印这个数的每一个数字这个例题也是主函数调用一个函数,以后这种例题我们会经常见到,而且像学生管理系统这种之类的题型就是由一个主函数调用了多个函数.这个题主要分析这个自己定义的函数.如下面例题:#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>void print(unsigned int n) //自己定义{ if (n>9) .
2021-03-17 16:46:15 362
原创 怎样实现将分数进行相加的操作?
分数相加操作题目:计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值,打印出结果这个题目看到是分数,一眼看起来很难.其实只要多加分析,就很容易了思路:1.for循环列出1-1002.加一个数就是让这个数除1,在进行相乘即可3.每隔一个数乘-14. 再每一个数上面加上一个1,让它成为分数.如下面例题:#include<stdio.h>#include<stdlib.h>int main(){ int i=0; doubl.
2021-03-17 16:14:44 1347 1
原创 寻找在1-100中一共有多少个9?
寻找9的数量题目:寻找1-100内出现了多少个9这个题目最主要的重点就是用两个不同的if语句查找十位和个位上出现了几个9,主要是要掌握你对C语言中运算符的熟练度和理解…思路:1.使用if语句看十位上有多少个92.使用if语句看个位上有多少个93.相加如下面例题:#include<stdio.h>#include<stdlib.h>int main(){ int i=0; int count=0; for(i=1;i<101;i++){ //.
2021-03-17 16:09:35 272
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人