![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux
th3103868414
从C语言开始
到C++截止
学了开发选了测试
在soc项目日复一日
展开
-
安装sz和rz命令
给服务器安装lrzsz:1、下载 lrzsz-0.12.20.tar.gz(百度找就可)2、查看里面的INSTALL文档了解安装参数说明和细节3、解压文件tar zxvf lrzsz-0.12.20.tar.gz4、进入目录cd lrzsz-0.12.205、./configure --prefix=/usr/local/lrzsz6、make7、make install8、建立软链接#cd /usr/bin#ln -s /usr/local/lrzsz/bin/lrz rz#ln原创 2021-04-08 17:26:24 · 347 阅读 · 0 评论 -
Linux15 进程替换
进程替换: 使用 fork 函数创建子进程的时候,和父进程执行的是相同的程序。但是实际在我们的期望中,子进程应该是执行和父进程不同的代码。所以此时,子进程往往要调用 exec函数从而执行另一个程序。调用 exec 并不创建新的进程,所以调用 exec 函数并不会改变该进程的 pid。 被替换的用户的代码和数据完全被新的程序替换,并从新的程序的启动例程开始执行。e...原创 2019-04-20 11:32:07 · 146 阅读 · 0 评论 -
Linux16 进程间通信(一) 管道
进程间通信:管道、信号量、共享内存、消息队列、socket、stream管道 半双工,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道;可以通过sockpair实现全双工管道。分为pipe(无名管道)和fifo(命名管道)两种,除了建立、打开、删除的方式不同外,这两种管道几乎是一样的。他们都是通过内核缓冲区实现数据传输。 管道一端的进程顺序地将进程数...原创 2019-04-20 11:36:53 · 159 阅读 · 0 评论 -
Linux17 进程间通信(二) 消息队列
每个进程有4G的虚拟地址空间,3G的用户空间是每个进程独有的,1G的内核空间是共享的内核对象:内核里面的一个结构体变量。标识符和键都能唯一的标识一个对象。标识符是内核中对象的标识,键是用户层次对内核中对象的标识,两个进程需要访问同一个内核对象,必须给一个相同的key值。我们通过键值来找到内核对象的标识符。(一)消息:类型+数据。(一种简单的协议)消息是一条一条的,读取的时候一次只能读一...原创 2019-04-20 11:39:34 · 133 阅读 · 0 评论 -
Linux18 进程间通信(三)信号量
信号量:进程同步控制。信号量用来同步进程,像红绿灯控制东西、南北车辆一样。引入信号量会使程序的性能降低,但不同步程序的安全性得不到保障。进程同步:进程协同工作进程异步:进程独立运行,互不干扰,但两个进程之间是有关系的,没有关系的进程叫做并发执行,需要内核机制来通知(信号就是一种很好的通知方式。)临界资源:同一时刻只能被一个进程访问使用的资源,临界资源可以有多份。临界区:访问临界资源...原创 2019-04-29 16:21:48 · 210 阅读 · 0 评论 -
Linux19 进程间通信(四)共享内存
共享内存是最快的一种IPC使得A进程和B进程都能通过虚拟地址映射到同一块物理空间上。区域既属于A进程又属于B进程。两个进程共享同一块空间。两个指针访问同一块内存,不需要切换内核态,不需要经过操作系统。1、 共享内存一旦使得进程映射到此共享内存区域,不需要用户态切换成内核态。2、 共享内存相比较于其他通信方式,会少两次数据的拷贝。共享内存实现:<sys/shm.h>(1) 创...原创 2019-04-29 16:24:34 · 677 阅读 · 0 评论 -
Linux20 多线程编程
(一)多线程编程线程:是轻量级的进程。是进程内部的一条执行指令(一组有序指令),或者说是执行流。一个进程至少由一条线程,就是main函数所代表的执行序列。称之为主线程。通过线程库可以创建线程----函数线程。主线程仅仅代表进程执行的第一条线程而已。当主线程通过线程库创建出主函数线程以后,所有线程就没有任何区别。主线程默认结束,结束是整个进程。进程和线程的区别:1、 进程是资源分配的单位...原创 2019-04-29 16:39:33 · 241 阅读 · 0 评论 -
Linux21 计算机网络基础
(一)基础名词1、 网络:将计算机串联起来互联网:将各个网络串联起来Inter2、 网络通讯的主角:运行在不同机器上的两个进程3、 IP地址:便于寻址,标识网络中的机器4、 端口号:标识机器上运行的进程,唯一标识一个应用程序。HTTP协议默认使用80,但是可以改。5、 IP+端口:可以唯一标识一个进程。6、 网络设备:路由器(存储、选路、转发),交换机7、 网线:(双绞线100米)...原创 2019-04-29 16:44:03 · 130 阅读 · 0 评论 -
Linux22 TCP编程流程
TCP:面向连接的、可靠的、字节流服务UDP:无连接、不可靠的、数据报服务IP:无连接、不可靠的、无状态的无状态:数据的发送、传输、接收相互独立的,没有上下文关系。接收端接收的数据有可能重复和乱序。头文件# include <stdio.h># include <stdlib.h># include <string.h># include <...原创 2019-04-29 16:48:26 · 194 阅读 · 0 评论 -
Linux23 UDP编程流程
UDP服务器编程流程int socket(int domain, int type, int protocol);int bind(int sockfd, struct sockaddr addr,int len);int recvfrom(int sockfd,void bff,int len,int flg,struct sockaddr caddr,int len);int send...原创 2019-04-29 16:49:31 · 126 阅读 · 0 评论 -
Linux24 TCP三次握手和四次挥手
(一) TCP特点(1)是一个面向连接的传输层协议,一条TCP连接只能有两个端点,必须先建立连接(虚连接),才收发数据,依靠三次握手建立连接,connect叫做发起连接(开始三次握手),四次挥手是close引起的。(2)提供可靠的交付服务,可靠性依靠应答确认,超时重传。自动重传请求ARQ,后来为连续ARQ协议。(3)是全双工通信。(4)面向字节流:发送的次数与接收数据的次数没有关系,底层...原创 2019-04-29 16:53:24 · 227 阅读 · 0 评论 -
Linux14 信号的使用及底层实现
(一)信号操作系统预先定义好的某些特定的事件,信号可以被产生,也可以被接受。产生和接收的主体都是进程。进程接受到信号后,怎么处理——信号的响应方式:默认SIG_DFL, 忽略IG_IGN,自定义如何修改信号的响应方式:typedef void(*Fun) (int);Fun signal (int signum,Fun fun);//修改信号响应方式的函数signal,信号值,信...原创 2019-04-20 11:19:45 · 552 阅读 · 0 评论 -
Linux13 僵死进程
<defunct>僵死进程: PCB存在,进程主体释放,子进程结束,父进程未获取子进程的退出码,从而子进程不得不保存退出码,所以整个PCB也就无法释放。子进程结束会向父进程发送一个SIGCHLD信号。 孤儿进程:孤儿进程会被init接管。僵死进程处理办法:父进程获取子进程的退出码:pid_t wait(int* reval);pid_t wai...原创 2019-04-20 11:08:21 · 196 阅读 · 0 评论 -
Linux12 父子进程
(一)数据不共享父子进程的堆区数据、栈区数据、全局数据是不共享的。子进程变量赋值后父进程的值不变,父子进程各自拥有这一变量的副本,互相不影响。通过一段代码研究一下父子进程的是否存在数据共享。数据分成:堆区数据、栈区数据、全局数据。所以我现在有三个变量,同时,我让子进程改变这三个变量的值。让父进程沉睡两秒钟以确保子进程运行结束。结果如下:值发生了改变,说明父子进程的堆...原创 2019-04-14 17:43:24 · 980 阅读 · 1 评论 -
Linux06 链接文件
1、 链接文件链接分为两种:软连接:符号链接,相当于windos上的快捷方式,软链接文件存储文件路径,软链接和源文件使用不同的inode结点,创建软链接文件,ln -s 源文件 新的链接文件,eg ln -s mian.c test.c,test.c就是软链接。硬链接:相当于源文件的别名,硬链接文件和源文件使用同一个inode。ln 源文件 链接文件。ll ...原创 2019-03-15 15:50:10 · 223 阅读 · 0 评论 -
Linux01 文件层次结构
操作系同用于管理软硬件资源,为用户提供与计算机交互的一种软件。windows和Linux系统都为操作系统。相对于windows来讲Linux特性有:1、开源,免费,随时修改获取源码2、允许多个用户同时登陆系统工作,适用于企业使用3、内核小4、支持硬件设备多在Linux系统下一切皆文件。Linux文件存储都是以根目录开始的 “/”/bin:存储系统所使用的命令的...原创 2019-03-11 16:33:43 · 173 阅读 · 0 评论 -
Linux02 文件类型&&文件权限
Linux系统下一切皆文件:(一)文件可分为5类 (Linux不以扩展名来区分文件类型)1、普通文件:.c/.java/.class/.txt2、目录文件:文件夹,文件里面都是文件 “d”3、管道文件:进程向管道里写信息,从管道中读信息 “p”4、链接文件:包含另一个文件的路径名,可链接任意文件 “l”5、设备文件: 块设备:按块...原创 2019-03-11 17:04:38 · 184 阅读 · 0 评论 -
Linxu03 文件操作常用命令
文件操作常用命令普通文件以main.c文件为例、目录文件以ttt为例1、创建普通文件 touch main.c(中间有一个空格) 创建目录文件 mkdir ttt2、删除普通文件 rm main.c 删除目录文件 rm ttt 删除非空目录 rm -r ttt3、拷贝普通文件cp ttt(路径)/main.c(文件名) zz...原创 2019-03-13 16:25:26 · 372 阅读 · 0 评论 -
Linux04 LinuxC程序编译链接过程
C/C++编译链接过程文件以main.c为例,main.c内容如图(1)所示1、第一步预编译后生成main.i文件,其中部分内容如图所示,预编译阶段做的事情有:(1)处理预编译指令(2)删除注释(3)将包含的头文件展开(生成main.i文件使用的命令为gcc -E main.c -o main.i)2、编译后生成main.s文件,其中部...原创 2019-03-13 16:35:18 · 253 阅读 · 0 评论 -
Linux10 文件操作函数
1、库函数和系统调用函数Linux上可以用C语言的文件操作函数(fopen fread fwrite fclose fseek)(库函数)但是Linux系统有自己的文件操作函数(open read write close lseek stat)(系统调用函数)库函数:把功能进行封装,封装成库函数,用不同的语言库就不一样。(eg:libc pritf函...原创 2019-04-10 17:25:30 · 658 阅读 · 1 评论 -
Linux07 makefile工程管理工具
1、makefile文件的作用(摘抄) 一个工程中的源文件按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作。 makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率...原创 2019-04-02 14:06:30 · 865 阅读 · 0 评论 -
Linux08 进程管理命令&&用户管理命令
1、进程管理命令进程:运行中的程序,将程序加载到内存上。程序:存储在磁盘上的可执行的二进制文件。Linux系统上记录进程: /proc 虚拟目录,以进程为单位存储内存的映射。进程命令:(1)查看进程ps:查看当前终端进程ps -e:查看系统所有进程ps -f:比ps多打印一点信息uid ppidps -ef:系统所有进程的所有信息...原创 2019-04-02 16:38:53 · 154 阅读 · 0 评论 -
Linuc 09 什么是进程&操作系统对进程的管理
1、计算机基本组成:CPU 内存 I/O程序:存储在磁盘上的可执行文件。(一组有序的指令集和)进程:进程是运行中的程序。(一段程序的执行过程)(一组有序指令+数据+资源的集合)main.c、编译链接后生成 main(ELF)都是文件,文件在磁盘上放./main执行起来以后,成为运行着的程序(进程),在内存上放,CPU按照顺序执行进程中的指令2、操作系统的发展(1...原创 2019-04-09 17:12:16 · 256 阅读 · 0 评论 -
Linux11 进程的创建fork()
fork函数fork是系统调用函数。fork()出错返回-1,fork函数调用一次,返回两次。fork()的功能是创建进程。 fork调用后会生成一个新的进程。fork()会在原进程中返回新进程的pid,不可能为0。在新进程中返回0。原来的进程是父进程,新进程是子进程。int main(){ pid_t n=fork(); assert(n!=-1); ...原创 2019-04-14 15:30:19 · 170 阅读 · 0 评论 -
Linux05 gdb使用的相关命令
gdb调试流程Linux用gcc 编译默认生成release版本,release是发行版本,debug是开发版本,debug版本生成的可执行文件比release版本要大一些,里面生成了一些debug_*段,可用于调试,debug_*段是在编译阶段加入的。1、编译链接:gdb调试要生成debug版本,生成debug版本的方式。 编译:gcc -c main.c -g...原创 2019-03-14 14:54:08 · 151 阅读 · 0 评论