Linux
本余
木一本,木一人余。
展开
-
Linux学习笔记(1)汇编的编译原理
汇编的编译原理:1.预处理(预编译)--------cpp/gcc -E .c->.i预编译主要处理源代码中以#开始的预编译指令(1)将所有#define删除,并且展开所有宏定义(2) 处理所有的条件预编译命令。(3)处理#include,将被包含的文件插入到该预编译指令的位置。(4) 删除所有的注释。(5) 添加行号和文件名标识,以便于产生编译错误时报错。(6)保留#...原创 2018-11-16 23:46:21 · 227 阅读 · 0 评论 -
Linux文件压缩
文件压缩在Windows下通过第三方软件来完成 7Z/快压Linux使用 tar , gzip打包:tar cf xxx.tar filelist (c–》创建, f—》指定目标是文件而不是设备)压缩:gzip xxx.tar -----》 xxx.tar.gz解压缩:gzip -d xxx.tar.gz解包:tar xf xxx.tar ...原创 2019-04-21 15:39:38 · 134 阅读 · 0 评论 -
链接文件&库文件
1.Linux下文件类型目录 普通 管道 链接 设备2.链接文件在Linux上链接分为两种;(1)软连接:符号链接相当于windows上的快捷方式,存储的是源文件的存储路径,软链接和源文件使用不同inode节点,删除源文件,符号链接失效创建: ln -s 源文件 链接文件2)硬链接:相当于源文件的别名,和源文件使用同一个inode节点创建:ln 源文件 链接文件3.Linux...原创 2019-04-21 15:44:16 · 784 阅读 · 0 评论 -
gdb
1.Linux调试工具 gdb源代码-------》可执行文件 (Linux下默认)release版本 发行版本debug版本 开发版本 可调试版本(添加了一些debug段)gcc -c main.c -g编译过程中加入debug信息gcc -c main.c -g链接阶段不会加入debug信息gcc -o main main.o2.调试对象:debug 可以单...原创 2019-04-21 15:46:37 · 118 阅读 · 0 评论 -
Linux下C程序的4G空间布局
128G不可访问区char *p = NULL;strcpy(p, "hello");//error程序崩溃的原因访问了不可访问区原创 2019-04-21 15:47:42 · 215 阅读 · 0 评论 -
Linux c程序的编译&链接
Linux下每一步生成文件的后缀源代码 预编译 编译 汇编 链接.c .i .s .o a.out1.预编译:gcc -E .c -o .i处理预编译指令,删除注释2.编译:gcc -S .i词法、语法、解析,代码优化生成符号3.汇编:gcc -c .s可重定位的二进制目标文件...原创 2019-04-21 15:54:17 · 193 阅读 · 0 评论 -
进程命令&用户命令
1.进程和程序的概念进程:运行中的程序,执行时将程序加载到内存上,进程是动态的概念程序:存储在磁盘上的可执行的二进制文件c&c++源代码-----》编译-------》链接---------》程序Java源代码-----》编译------》字节码文件 (JVM Java的虚拟机)进程类似于演奏过程,程序类似于乐谱2.进程的五种状态转化图:运行:CPU正在执行进程中...原创 2019-04-21 17:18:57 · 495 阅读 · 0 评论 -
文件操作函数&用户态切内核态的过程
1.Linux上编程完成文件操作:c语言:fopen fread fwrite fclose fseek (库函数)Linux:open read write close seek stat (系统调用)2.系统调用函数内核函数提供给上层的接口,调用在用户态,执行在内核态例子:open函数的系统调用1.触发)0X80中断2.保存程序的上...原创 2019-04-21 22:10:10 · 741 阅读 · 0 评论 -
写时拷贝&父子进程文件共享&信号使用
父子进程关系父子进程代码段永远是共享的1.数据:(1)全局变量(2) 局部变量局部变量以及全局变量都是在堆区,而堆区数据不共享malloc仅仅开辟虚拟空间,真正开辟物理空间是在程序中使用开辟的空间时。fork之后有写时拷贝技术fork之后,子进程会拷贝父进程的pcb结构,然后对PCB里面的数据做修改,父进程的页表直接拷贝给子进程。父子进程共享所有的数据空间。当父子进程任意一个进程...原创 2019-04-21 22:11:45 · 523 阅读 · 0 评论 -
信号底层实现机制&进程替换
1.异步处理两个以上进程或线程执行互不影响,同时向下执行,当某个时刻,一个进程或线程会通过系统机制通知其他进程或线程2.同步处理一个进程或线程的执行,需要依赖其他的进程或者线程的执行3.信号的发送kill(1234, SIGINT);//SIFINT == 2底层调用sys_kill(1234, 2);信号触发中断机制,触发中断处理程序,调用信号处理函数。4.信号处理函数被注...原创 2019-04-21 22:14:22 · 277 阅读 · 0 评论 -
进程间通信-管道
1.为什么要进行多进程编程为了解决一个复杂问题,这个任务需要同时处理几件事,一个任务有多个子任务例如:浏览器后台需要处理流量监控,安全监控等接收用户输入。2.一个进程的数据怎么从一个进程到另一个进程进程间通信,方式有:管道,信号量, 共享内存 、消息队列、socket网络通信实质上也是进程间通信。3.管道(进程间传递数据的)无论是有名管道还是无名管道:在同一时刻只能是一端读一端写,是...原创 2019-04-21 22:15:57 · 140 阅读 · 0 评论 -
文本编辑(普通文件)vi/vim
1.三种模式:命令模式、插入模式、末行模式命令模式----》插入模式:a ,i ,o ,O插入模式----》命令模式: ESC命令模式----》 末行模式: :/ ?2. 末行模式:q 退出: w 保存: w newfile 另存为: wq 保存退出:q! 强制退出: num 跳到n行:set nu 设置行号:set nonu 取消行号/stri...原创 2019-04-20 20:50:20 · 156 阅读 · 0 评论 -
Linux文件管理命令
1.什么是操作系统?操作系统是管理软硬件资源,并为用户提供与计算机交互的一种软件。2.Linux和window操作系统的区别?Linux操作系统:1.免费的2.开源的3.允许多用户同时登陆系统工作4.内核相对小Windows:1.不开源2.不免费两种系统目录结构:/bin: 存储系统所使用的命令的可执行文件/home:普通用户的家目录/dev:外部设备/proc:虚拟...原创 2019-04-20 20:23:34 · 155 阅读 · 0 评论 -
Linux学习笔记(2)makefile文件以及如何用gdb调试程序
1.在编译器底层有Makefile,通过make这个命令完成自动化编译。makefile管理工程,实现自动化编译。我的实例里包含main.c add.c max.c三个c程序。我们需要写一个Makefile文件,告诉make命令如何去编译链接这几个文件。(1.)如果这个工程从未编译,那么需要编译所有的c文件并且链接。(2.)如果只是个别c文件被修改,那么只编译被修改的文件,并且链接最终文件...原创 2018-11-23 20:30:23 · 460 阅读 · 0 评论 -
linux学习笔记(3)库 静态库、 共享库
1.库的定义:(1)库是预先编译好的方法的集合。(2)Linux上库的命名一般为libxxx.a(静态库)或者libxxx.so(共享库)(3)库文件常放的地点为/lib或者/usr/lib,库对应的头文件一般放在/usr/include中。2.静态库的生成若有两个方法int add(int x,int y),int main(int x,int y)分别在两个文件夹add.c和max....原创 2018-11-23 21:12:45 · 93 阅读 · 0 评论 -
mybash(linux)
mybash:通常shell中执行命令的流程都是bash进程创建一个子进程,然后子进程进程替换,替换成可执行的命令文件。本质:不断进行fork()+ exec()bash输出信息的格式:[用户名@主机名所在文件]$(root用户:[用户名@主机名所在文件]#)。当所在文件就是当前用户的家目录时显示“~”。程序代码如下:(此程序(1.mybash.c)只可以用系统的个命令,也就是输入的命令调用...原创 2018-11-17 10:31:44 · 446 阅读 · 0 评论 -
Java集合框架(2)List,LinkedList
List是java中一种常见的容器。所谓容器,是指它能够容纳其它对象。//利用ArrayList实现完成一个栈结构import java.util.*;class MyStack<T>{ private ArrayList<T> al = new ArrayList<T>(); public boolean push(T e...原创 2018-11-22 18:00:53 · 152 阅读 · 0 评论 -
Linux学习笔记(5)fork总结以及源码剖析
1.进程的层次每个进程都有父进程,父进程也有父进程,形成了一个以init进程为根的家族树。2. 进程的创建之fork()Linux系统下,进程可以调用fork函数来创建新的进程,调用进程为父进程,被创建进程为子进程。# include <unistd.h>pid_t fork(void);//fork函数的接口fork函数会返回两次,fork函数向子进程返回0,并将子进...原创 2019-01-03 20:41:39 · 269 阅读 · 0 评论 -
Linux学习笔记(4)socket收发消息原理剖析
Linux环境下“一切皆文件”,套接字被视为文件描述符,1.创建套接字#include &lt;sys/type.h&gt;#include &lt;sys/socket.h&gt;int socket(int domain,int type,int protocol);//成功创建返回一个文件描述符,否则返回-1//1.domain:指示协议族的名字,如AF_INET为IPv4//2...原创 2019-01-02 23:31:08 · 493 阅读 · 0 评论 -
shell编程(Linux)
C语言:编译型,main.c-》main.exe,执行效率高,开发效率低。shell编程:解释型main.sh通过需要通过一个解释器,解释执行main.sh执行效率高开发效率低。Python:解释型语言。脚本其实是传给解释器的参数,脚本主要用在系统维护上。shell的基本语法1.变量(1)本地变量赋值时等号左右不能有空格,判断时等号左右用空格隔开。赋值时单引号和双引号无区别,当右...原创 2019-01-02 23:34:41 · 113 阅读 · 0 评论 -
Linux下如何编写一个简单的Makefile文件
一、Makefile基本知识点1.makefile文件关系到整个工程的编译规则。(一个工程中的源文件不计其数,其按照类型,功能,模块分别存放在不同的目录中)2.Makefile定义了一系列的规则来指定,那些文件需要先编译,那些文件需要重新编译。3.makefile像一个shell脚本一样,其中也可以执行操作系统的命令。4.makefile一旦写好,只需要一个make命令就可以使得工程完全自动...原创 2019-03-10 18:07:58 · 9871 阅读 · 2 评论 -
vim使用
一、vim的定义?vim是从vi发展出来的一个文本编辑器。二、vim的三种模式基本上vi/vim分为三种模式,分别是命令模式(Command mode)、输入模式(Insert mode)和底线命令模式(last line mode)。刚启动vi后,进入的是命令模式,通过“i”进入输入模式可以开始编辑文本,通过“:”进入底线命令模式可以开始编辑命令。按esc,可以退出输入模式,切换到命令...原创 2019-03-10 18:39:32 · 139 阅读 · 0 评论 -
内存管理
本文将先从进程内存管理出发,然后到内核中的内存管理1.进程与内存?所有的进程都必须占用一定数量的内存,它或是用来存放从磁盘载入的程序代码,或是存放取自用户输入的数据等等。不过进程对这些内存的管理方式因内存的用途而不一样,有些内存是事先分配的并且统一回收的,而有些却是按照需要动态分配和回收的。对于任意一个进程都会涉及5个数据段。代码段:代码段用来存放可执行文件的操作指令,也就是说它是可执行程...原创 2019-03-07 15:25:16 · 124 阅读 · 0 评论