
Linux
小米内推官_AngelDg
我们总以为,是生活欠我们一个“满意”,其实是我们欠生活一个“努力”。
展开
-
malloc 的实现原理
文章目录结论具体内容内存分配的原理具体分配过程提问摘要:由于面试题会问到 malloc 的底层原理,今天就来记录一下,毕竟学习要“知其所以然”,这样才会胸有成竹。注:下面分析均是基于 linux 环境下的 malloc 实现。Linux 的虚拟内存管理有几个关键概念:每个进程都有独立的虚拟地址空间,进程访问的虚拟地址并不是真正的物理地址;虚拟地址可通过每个进程上的页表(在每个进程的内核虚拟地址空间)与物理地址进行映射,获得真正物理地址;如果虚拟地址对应物理地址不在物理内存中,则产生缺页中断,原创 2020-12-28 00:06:14 · 5159 阅读 · 3 评论 -
带你一起深入Debug和Release版本的区别
文章目录Debug和Release的区别:Obj文件夹的作用BinDebug 和 Release 编译方式的本质区别附录: DLL的灾难Debug和Release的区别:Debug:调试版本, 包含调试信息,所以 容量比Release大很多, 并且不进行任何优化(优化会使调试复杂化,因为源代码和生成的指令间关系会更复杂),便于程序员调试。Debug模式下 生成两个文件, 除了 .exe 或 .dll 文件外,还有一个 .pdb 文件,该文件记录了代码中断点等调试信息。Release:发布版本,原创 2020-12-21 11:27:51 · 3123 阅读 · 0 评论 -
输入URL之后发生了什么?
文章目录什么是URL?输入URL之后发生了什么DNS 解析过程HTTP 请求过程HTTPS建立连接网络层:IP协议查询Mac地址链路层:以太网协议浏览器接受响应页面渲染关闭TCP连接或继续保持连接什么是URL?在WWW上,每一信息资源都有统一的且在网上唯一的地址,该地址就叫URL(Uniform Resource Locator,统一资源定位器),它是WWW的统一资源定位标志,就是指网络地址。URL由4部分组成:协议、主机、端口、路径URL的一般语法格式为:(带方括号[]的为可选项):原创 2020-08-14 10:40:20 · 239 阅读 · 0 评论 -
断点续传原理解析
断点续传断点续传概念HTTP 断点续传的原理:举个例子Range & Content-Range增强校验Last-ModifiedEtagIf-Range工作原理断点续传概念从文件上次中断的地方开始重新下载或上传,当下载或上传文件的时候,如果没有实现断点续传功能,那么每次出现异常或者用户主动的暂停,都会去重头下载,这样很浪费时间。所以断点续传的功能就应运而生了。要实现断点续传的功能,需要客户端记录下当前的下载或上传进度,并在需要续传的时候通知服务端本次需要下载或上传的内容片段。HTTP 断原创 2020-08-13 18:59:23 · 2796 阅读 · 0 评论 -
Linux:带你理解多路转接IO
高级IO四种IO模型阻塞 vs 非阻塞同步通信 vs 异步通信多路转接IO多路转接IO模型四种IO模型阻塞IO / 非阻塞IO / 信号驱动IO / 异步IOIO的过程:发起IO调用,等待IO条件就绪,然后将数据拷贝到缓冲区中进行处理 — 等待 / 拷贝阻塞IO为了完成 IO,发起调用。若当前不具备IO条件,则一直等待非阻塞IO为了完成 IO,发起调用。若当前不具备IO条件,则立即返回(操作流程都是顺序的一个一个进行,利用了等待时间,需要循环操作重新发起IO)信号驱动IO原创 2020-07-11 23:12:47 · 386 阅读 · 0 评论 -
Linux:带你理解数据链路层
数据链路层链路层认识MAC地址认识以太网以太网帧协议格式ARP协议ARP协议的作用ARP协议的工作流程ARP数据报的格式认识MTUMTU对于传输层协议的影响其他典型协议及技术:DNSicmpNAT / NAPT代理服务典型面试题链路层负责相邻设备之间的数据传输相邻设备:连接起来的两个设备就是相邻设备。认识MAC地址一个路由器有可能连接了很多设备,也就是说一个设备有很多的相邻设备,那么问题来了,如何识别指定的相邻设备?相邻设备的识别通过物理网卡的硬件地址进行识别物理地址 - MAC地址(uin原创 2020-07-08 12:13:54 · 795 阅读 · 0 评论 -
Linux:带你理解网络层IP协议
IP协议网络层IP协议头格式地址管理网段的划分:特殊的IP地址路由选择公网与私网(外网与内网)网络层负责地址管理与路由选择:路由器(IP协议)IP地址:无符号32位的一个整数,在网络中唯一标识一台主机(IP地址给主机的分配一定要保证唯一性)IP协议头格式4位协议版本:IPV4 / IPV64位头部长度:IP报头也是不定长的,最长60字节,最小20字节,有40字节的选项数据(以4字节为单位)8位TOS字段:3位优先权弃用,4位服务类型(最小延时,最大吞吐量,最高可靠性,最小成本),1位保留原创 2020-07-08 00:59:44 · 887 阅读 · 0 评论 -
Linux:带你理解传输层的UDP/TCP协议
UDP/TCP协议再谈端口号端口号范围划分netstatpidof传输层UDP协议协议实现对上层应用的影响:TCPTCP数据传输的过程TCP 和 UDP 对比面试系列再谈端口号端口号(Port)标识了一个主机上进行通信的不同的应用程序;在TCP/IP协议中, 用 “源IP”, “源端口号”, “目的IP”, “目的端口号”, “协议号” 这样一个五元组来标识一个通信(可以通过 netstat -n查看);端口号范围划分0 - 1023: 知名端口号, HTTP, FTP, SSH等这些广为原创 2020-07-05 15:10:05 · 647 阅读 · 0 评论 -
Linux:带你理解应用层的HTTP协议
http协议应用层自定制协议网络版计算器HTTP协议网址url编码、解码HTTP协议格式编写一个简单的http服务器应用层负责应用程序之间的数据沟通(我们程序员写的一个个解决我们实际问题, 满足我们日常需求的网络程序, 都是在应用层)自定制协议结构化数据的传输(通过结构体在内存中对数据对象进行组织,将二进制数据传输出去)使用结构体进行数据对象的二进制结构化组织,进行数据传输/可持久化数据存储序列化:将数据对象按照指定协议进行组织成可持久化存储/数据传输的二进制数据串反序列化:将持久化存储/原创 2020-07-04 00:34:41 · 657 阅读 · 0 评论 -
Linux:socket套接字介绍及实现简单的tcp通信
tcp 编程tcp客户端与服务端流程:socket接口介绍:tcp编程:面向连接,可靠传输,面向字节流tcp客户端与服务端流程:客户端:创建套接字,描述地址信息,发起连接请求,连接建立成功,收发数据,关闭服务端:创建套接字,描述地址信息,开始监听,接受连接请求,新建套接字,获取新建套接字描述符,通过这个描述符与客户端通信,关闭socket接口介绍:创建套接字int socket(int domain, int type, int protocol) - ( AF_INET原创 2020-07-03 17:43:43 · 489 阅读 · 0 评论 -
Linux:socket套接字介绍及实现简单的udp通信
网络套接字转换socket套接字编程:sockte编程:tcp/dupudp 网络通信程序编程流程sockaddr结构转换为使网络程序具有可移植性,使同样的C代码在大端和小端计算机上编译后都能正常运行,可以调用以下库函数做网络 字节序和主机字节序的转换。这些函数名很好记,h表示host,n表示network,l表示32位长整数,s表示16位短整数。例如htonl表示将32位的长整数从主机字节序转换为网络字节序,例如将IP地址转换后准备发送。如果主机是小端字节序,这些函数将参数做相应的大小端转原创 2020-06-29 15:26:32 · 450 阅读 · 0 评论 -
Linux:初识计算机网络
计算机网络背景网络发展网络通信IP地址端口协议(约定)协议分层:网络通信环境中的协议分层:网络发展独立模式: 计算机之间相互独立网络互联: 多台计算机连接在一起, 完成数据共享;局域网LAN: 计算机数量更多了, 通过交换机和路由器连接在一起;交换机:实现主机之间的数据交换路由器:不但时间数据交换,并且实现数据的路径选择网络以覆盖范围划分:局域网,域域网,广域网组网方式:以太网/令牌环网网络通信在复杂的网络通信中,必须保证每个主机都有自己唯一的标识,只有这样才原创 2020-06-26 11:48:56 · 647 阅读 · 0 评论 -
Linux:解析读写锁
读写锁读写锁状态:读写锁特性:应用函数:与互斥量类似,但读写锁允许更高的并行性。其特性为:写独占,读共享,写锁优先级高读写锁状态:一把读写锁具备三种状态:读模式下加锁状态 (读锁)写模式下加锁状态 (写锁)不加锁状态读写锁特性:读写锁是“写模式加锁”时, 解锁前,所有对该锁加锁的线程都会被阻塞。读写锁是“读模式加锁”时, 线程以读模式对其加锁会成功;线程以写模式加锁会阻塞。读写锁是“读模式加锁”时, 既有试图以写模式加锁的线程,也有试图以读模式加锁的线程。那原创 2020-06-25 22:16:46 · 205 阅读 · 0 评论 -
Linux:带你理解线程池
线程池概念为什么用线程池概念线程的池子,有很多线程,但是数量不会超过池子的限制。(需要用到多执行流并行进行任务处理的时候,就从池子中取出)为什么用线程池有大量的数据处理请求,需要多执行流并发/并行处理若是一个数据请求的到来伴随一个线程的创建去处理,则会产生一些风险以及一些不必要的消耗:线程若不限制数量的创建,在峰值压力下,线程创建过多,资源耗尽,有程序崩溃的风险处理一个任务的时间:创建线程时间t1+任务处理时间t2+线程销毁时间t3 = T。若t2/T比例占据不够高,则表示大量的资源用于线原创 2020-06-25 11:02:00 · 353 阅读 · 0 评论 -
Linux:带你理解死锁(银行家算法详解)
死锁死锁概念:死锁产生的必要条件:死锁的预防死锁的避免银行家算法的思路:系统的安全状态/非安全状态死锁概念:多个执行流对锁资源争抢访问,但是因为访问推进顺序不当,造成互相等待最终导致程序流程无法继续推进,这时候就造成了死锁死锁实际是一种程序流程无法继续推进,卡在某个位置的一种概念死锁的产生通常是在访问多个锁的时候需要注意的事项死锁产生的必要条件:互斥条件:我加了锁,别人就不能再继续加锁不可剥夺条件:我家的锁,别人不能解,只有我能解锁请求与保持条件:我加了A锁,然后去请求B锁;如果不能对B原创 2020-06-23 07:42:09 · 1437 阅读 · 0 评论 -
Linux:生产者消费者模型(Posix信号量)
生产者消费者模型应用场景概念优点:基于BlockingQueue的生产者消费者模型实现:应用场景有线程不断的生产数据,有线程不断的处理数据数据的生产与数据的处理,放在同一个线程中完成,因为执行流只有一个,那么肯定是生产一个处理一个,处理完一个后才能生产一个这样的话依赖关系太强 - 如果处理比较慢,也会拖的生产速度慢下来因此生产与处理放到不同的执行流中完成,中间增加一个数据缓冲区,作为中间的数据缓冲场所概念生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此原创 2020-06-22 22:36:38 · 514 阅读 · 0 评论 -
Linux:带你理解乐观锁和悲观锁
死锁概念:死锁产生的必要条件:死锁的预防死锁的避免概念:多个执行流对锁资源争抢访问,但是因为访问推进顺序不当,造成互相等待最终导致程序流程无法继续推进,这时候就造成了死锁死锁实际是一种程序流程无法继续推进,卡在某个位置的一种概念死锁的产生通常是在访问多个锁的时候需要注意的事项死锁产生的必要条件:互斥条件:我加了锁,别人就不能再继续加锁不可剥夺条件:我家的锁,别人不能解,只有我能解锁请求与保持条件:我加了A锁,然后去请求B锁;如果不能对B锁加锁,则也不释放A锁环路等待条件:我加了A锁,然原创 2020-06-21 17:21:49 · 1461 阅读 · 0 评论 -
Linux:线程安全(多线程的同步与互斥、互斥锁、条件变量)
线程安全概念:线程间的互斥互斥的实现:互斥锁互斥锁的操作流程、接口介绍:简单案例互斥量(mutex)实现原理探究线程间的同步操作接口介绍简单案例概念:在多个执行流中对一个临界资源进行操作访问,而不会造成数据二义性如何实现线程安全: 同步与互斥互斥:通过保证同一时间只有一个执行流可以对临界资源进行访问(一个执行流访问期间,其他执行流不能访问),来保证数据访问的安全性同步:通过一些条件判断来实现多个执行流对临界资源访问的合理性(有资源则访问,没有资源则等着,等有资源了再被唤醒)线程间的互斥概原创 2020-06-20 18:04:22 · 407 阅读 · 0 评论 -
Linux:线程控制知识点总结
线程控制线程控制概念线程创建线程ID及进程地址空间布局线程终止线程等待线程分离线程控制概念线程控制的接口都是库函数(操作系统并没有向用户提供一个线程(轻量级进程)的接口,因此大佬们才封装的一套线程控制接口,这套封装的线程库函数,提供的线程的各种操作)使用库函数创建一个线程(用户态),本质上是在内核中创建一个轻量级进程来实现程序调度POSIX线程库:与线程有关的函数构成了一个完整的系列,绝大多数函数的名字都是以“pthread_”打头的要使用这些函数库,要通过引入头文<pthread.h原创 2020-06-19 18:57:45 · 205 阅读 · 0 评论 -
Linux:带你理解线程概念(CPU密集型 VS I/O密集型)
线程概念什么是线程多进程/多线程的优缺点分析(多任务处理)多线程的优点:多进程的优点:共同的优点:进程和线程线程间的独有与共享:什么是线程线程是进程中的一条执行流,在linux下是通过pcb实现的程序调度linux下的pcb实际上是一个线程,并且这些pcb共用同一个虚拟地址空间,共享进程大部分资源,相较于传统的pcb更加轻量化一点,因此也被称之为轻量级进程(线程)linux下的进程其实是一个线程组,一个进程中可以有多个线程(多个pcb),线程是进程中的一条执行流多进程/多线程的优缺点分析(原创 2020-06-19 01:26:02 · 1177 阅读 · 0 评论 -
Linux:理解阻塞信号与函数重入
信号阻塞信号的阻塞在内核中的表示信号集处理函数sigprocmask函数sigpending函数简介信号 SIGPIPE、SIGCHLDvolatile 关键字可重入函数信号的阻塞指一个信号的递达,信号依然可以注册,只是暂时不处理(未决状态)直到进程解除对此信号的阻塞,才执行递达的动作.注意:阻塞和忽略是不同的,只要信号被阻塞就不会递达,而忽略是在递达之后可选的一种处理动作。在内核中的表示实际执行信号的处理动作称为信号递达(Delivery ),信号从产生到递达之间的状态,称为信号未决(Pen原创 2020-06-18 12:08:21 · 555 阅读 · 0 评论 -
Linux:带你理解信号的生命周期
进程信号信号是什么?信号的产生通过终端按键产生信号调用系统函数向进程发信号由软件条件产生信号硬件异常产生信号信号是什么?信号就是一个软件中断:通知进程发生了某个事件,打断进程当前的操作,去处理这个事件。信号是多种多样的,并且一个信号对应一个事件,这样才能做到收到一个信号后,知道到底是一个是什么事件,应该如何处理。(但是要保证必须识别这个信号)信号种类:一共62种(使用kill -l命令进行查看)1~31是非可靠信号 (Mac终端只能看到这31个)34~64是可靠信号生命周期:产生-》进原创 2020-06-18 00:52:28 · 795 阅读 · 0 评论 -
Linux:简单理解System V -- 共享内存、消息队列、信号量
System V共享内存共享内存的操作流程:共享内存函数消息队列信号量共享内存本质原理: 多个进程要是映射同一块物理内存,就可以通过这块内存实现数据共享在物理内存上开辟一块内存空间多个进程可以将这块物理内存映射到自己的虚拟地址空间通过虚拟地址进行页表映射直接访问这块物理内存,实现数据共享特性:最快的进程间通信方式生命周期随内核注意事项:共享内存的操作是不安全的(并不会自动具备同步与互斥关系,需要操作用户进行控制)操作: 代码操作流程/具体的接口+命令操作ipcs/ipcrm原创 2020-06-17 12:59:48 · 848 阅读 · 0 评论 -
Linux:带你理解进程间通信--管道
管道进程间通信管道匿名管道命名管道管道的特性匿名管道与命名管道的区别:进程间通信进程间通信(IPC)是什么?操作系统为用户提供的几种进程间的通信方式为什么操作系统要为用户提供进程间通讯方式呢?进程间因为每一个进程都有一个虚拟地址空间,在保证了进程独立性的同时,却使得进程间无法直接通信。因此需要操作系统来提供进程间通信方式,并且因为通信场景不同,提供的方式也有多种如何提供进程间通信方式?给多个进程之间提供一个大家都能访问到的传播介质,并且操作系统在提供进程间通信方式的时候也根据通信原创 2020-06-17 10:07:38 · 5256 阅读 · 0 评论 -
Linux:带你理解文件系统
文件系统引入inode软链接和硬链接硬链接软链接引入我们使用ls -l的时候看到的除了看到文件名,还看到了文件元数据。每行包含7列:模式硬链接数文件所有者组大小最后修改时间文件名stat命令能够看到更多信息[root@localhost linux]# stat test.c File: "test.c"Size: 654 Blocks: 8 IO Block: 4096 普通文件Device: 802h/2050d Inode: 263715 Links原创 2020-06-16 19:53:58 · 236 阅读 · 0 评论 -
Linux:理解动态库和静态库
动态库、静态库库文件的定义:静态库与动态库生成静态库生成动态库使用动态库运行动态库静态库的链接:库文件的定义:打包了一堆实现了常用功能的额代码文件静态库与动态库静态库(.a):程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库动态库(.so):程序在运行的时候才去链接动态库的代码,多个程序共享使用库的代码。一个与动态库链接的可执行文件仅仅包含它用到的函数入口地址的一个表,而不是外部函数所在目标文件的整个机器码在可执行文件开始运行以前,外部函数的机器码由操作系统原创 2020-06-16 16:26:40 · 180 阅读 · 0 评论 -
Linux:带你理解文件描述符和重定向
文章目录文件描述符fd文件描述符(0 & 1 & 2)文件描述符的分配规则重定向常见的输出重定向重定向的本质使用 dup2 系统调用相关习题文件描述符fd文件描述符就是内核中 struct file* fd_array[]数组的下标,进程可以通过这个下标找到文件的描述信息,进而操作文件。文件描述符(0 & 1 & 2)Linux进程默认情况下会有3个缺省打开的文件描述符,分别是标准输入0(stdin), 标准输出1(stdout), 标准错误2(stderr)0原创 2020-06-16 13:20:08 · 1080 阅读 · 0 评论 -
Linux:基础IO接口的解析
基础IO理解库函数和系统调用库函数IO接口fopenfread、fwritefseekfclose系统调用IO接口openwritereadlseekclose理解库函数和系统调用上面的 fopen fclose fread fwrite 都是C标准库当中的函数,我们称之为库函数(libc)。而, open close read write lseek 都属于系统提供的接口,称之为系统调用接口我们先看下面一张图:由图可以看出:库函数是对系统调用接口的一种封装库函数IO接口fopen /原创 2020-06-16 10:06:26 · 364 阅读 · 0 评论 -
Linux:带你理解程序替换
进程替换原创 2020-06-14 10:27:46 · 383 阅读 · 0 评论 -
Linux:让你彻底理解进程等待
进程等待进程等待必要性进程等待的方法waitwaitpid进程等待必要性之前讲过,子进程退出,父进程如果不管不顾,就可能造成‘僵尸进程’的问题,进而造成内存泄漏。另外,进程一旦变成僵尸状态,那就刀枪不入,“杀人不眨眼”的kill -9 也无能为力,因为谁也没有办法 杀死一个已经死去的进程。最后,父进程派给子进程的任务完成的如何,我们需要知道。如果子进程运行完成,结果对还是不对, 或者是否正常退出。父进程通过进程等待的方式,回收子进程资源,获取子进程退出信息进程等待的方法waitpid_原创 2020-06-13 09:37:04 · 242 阅读 · 0 评论 -
Linux:理解如何终止进程
进程终止进程退出场景_exit函数进程终止如何终止一个进程return / exit / _exit 的区别return退出exit函数_exit函数附知识点:man手册,一个exit既有命令还有库函数还有系统调用接口man 1 exit 查看exit命令的手册man 2 exit 查看exit库函数的手册man 3 exit 查看exit系统调用接口的手册进程退出场景代码运行完毕,结果正确代码运行完毕,结果不正确代码异常终止_exit函数#include <unist原创 2020-06-11 20:35:31 · 675 阅读 · 0 评论 -
Linux:学会如何创建进程(fork、vfork、写时拷贝)
创建进程fork函数fork函数返回值fork常规用法fork调用失败的原因vfork函数进程创建的流程fork函数在linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程,复制父进程中的信息。新进程为子进程,而原进程为父进程。#include <unistd.h>pid_t fork(void); 返回值:子进程中返回0,父进程返回子进程id,出错返回-1进程调用fork,当控制转移到内核中的fork代码后,内核做:分配新的内存块和内核数据结构给子进程将原创 2020-06-11 19:09:29 · 637 阅读 · 0 评论 -
Linux:程序地址空间的详解
程序地址空间程序地址空间回顾程序地址空间是什么?进程地址空间如何虚拟一个内存空间?为什么要虚拟一个内存空间虚拟地址空间是什么:如何通过虚拟地址访问物理内存?如何通过虚拟地址得到物理地址缺页中断:交换分区程序地址空间回顾在学习C/C++的时候,我们对程序地址空间的认识基本上是酱紫的!程序地址空间是什么?程序地址空间:进程的虚拟地址空间程序中访问的地址都是虚地址地址:内存区域的编号 (程序是不占用内存的,运行起来的程序被加载到内存,才会占用内存)示例代码:#include &原创 2020-06-11 12:41:37 · 397 阅读 · 0 评论 -
Linux:理解环境变量
环境变量基本概念常见环境变量查看环境变量方法测试PATH环境变量的操作命令环境变量的组织方式获取环境变量环境变量通常是具有全局属性的基本概念环境变量(environment variables)一般是指在操作系统中用来配置操作系统运行环境参数的变量如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性常见环境变量原创 2020-06-10 22:41:08 · 288 阅读 · 0 评论 -
Linux:进程状态都有哪些
进程状态Linux下进程状态:进程状态查看查看最多创建进程数量Z(zombie)-僵尸进程僵尸进程的产生原因:僵尸进程的危害思考题孤儿进程守护进程/精灵进程:进程状态:就绪/运行/阻塞Linux下进程状态:R运行状态(running) : 并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列里。(就绪/运行) 只有运行状态的进程才会被操作系统调度在cpu上运行S可中断休眠状态(sleeping) :当前的阻塞能够被中断唤醒D不可中断休眠状态(Disk sleep) :当前的阻塞不原创 2020-06-10 19:09:24 · 1603 阅读 · 4 评论 -
Linux:深入理解进程的概念
进程基本概念cpu的分时机制:进程和程序的区别查看进程通过系统调用获取进程标示符进程创建通过系统调用创建进程-fork初识思考题:基本概念进程就是一个运行起来的程序(程序:一系列有序的指令集合 )进程是什么?进程就是pcb,是操作系统对一个运行中程序的描述,通过这些描述信息,完成对一个程序控制运行调度。Linux操作系统下的pcb是一个结构体:struct task_struct {…}task_struct(pcb的一种)在Linux中描述进程的结构体叫做task_struct。原创 2020-06-10 16:27:32 · 354 阅读 · 0 评论 -
Linux:简单了解操作系统
计算机的了解冯诺依曼体系结构操作系统(Operator System)概念设计OS的目的定位如何理解 "管理"系统调用和库函数概念冯诺依曼体系结构我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。截至目前,我们所认识的计算机,都是有一个个的硬件组件组成输入设备:包括键盘, 鼠标,扫描仪, 写板等 (采集获取数据)输出单元:显示器,打印机等(数据输出)存储器:内存(8G)运算器:中央处理器(CPU)控制器:中央处理器(CPU)关于原创 2020-06-10 14:56:13 · 449 阅读 · 0 评论 -
Linux:创建 git 仓库并链接到本地(含:基础操作命令)
首先, 先在github网站注册账号https://github.com然后创建一个项目, Create a new repository之后在在Repository name 填入 ZXTabBarController(你的远程仓库名) ,其他保持默认设置,点击"Create repository"按钮,就成功地创建了一个新的Git仓库:打开终端进入你的文件目录ssh-keygen -t rsa -C "zhouxihi@aliyun.com"改为你在 github 上注册的邮箱,之后会原创 2020-06-08 22:02:49 · 1239 阅读 · 0 评论 -
Linux:进度条程序的详解
进度条了解知识换行(\n)和回车(\r)的区别:缓冲区概念fflushusleep进度条小程序了解知识换行(\n)和回车(\r)的区别:<\r>回车(carriage return):即每次打印完使光标回到最开始位置<\n>换行(line feed):换到当前行的下一行,即光标指向下一行最开始的位置缓冲区概念缓冲区分为:无缓冲、行缓冲、全缓冲。无缓冲:表示的是没有缓冲,可以将信息立马显现出来,典型代表是标准错误流stderr。行缓冲:表示的是输入输出遇到换行才原创 2020-06-08 17:52:21 · 468 阅读 · 0 评论 -
Linux:详细解析项目自动化构建工具--make/Makefile
项目自动化构建工具背景make/Makefile:项目自动化构建工具依赖关系依赖方法原理makefile的编写规则:make的解释执行规则:.PHONY的使用背景会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作makefile带来的好处就是——“自动化编译”,一旦写原创 2020-06-08 11:56:09 · 518 阅读 · 0 评论