![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux基础使用
文章平均质量分 64
瞎子my
这个作者很懒,什么都没留下…
展开
-
虚拟内存
虚拟内存虚拟内存的好处:扩大地址空间;内存保护:每个进程运行在各自的虚拟内存地址空间,互相不能干扰对方。虚存还对特定的内存地址提供写保护,可以防止代码或数据被恶意篡改。公平内存分配。采用了虚存之后,每个进程都相当于有同样大小的虚存空间。当进程通信时,可采用虚存共享的方式实现。当不同的进程使用同样的代码时,比如库文件中的代码,物理内存中可以只存储一份这样的代码,不同的进程只需要把自己的虚...原创 2019-10-24 21:27:49 · 258 阅读 · 0 评论 -
IO多路转接之epoll
相对于select来说,epoll没有描述符个数限制,使用一个文件描述符管理多个描述符,将用户关心的文件描述符的事件存放到内核的一个事件表中,这样在用户空间和内核空间的copy只需一次。epoll的相关系统调用:epoll_createint epoll_create(int size);创建一个epoll的句柄。注意:自从linux2.6.8之后,size参数是被忽略的用完之后...原创 2019-06-30 23:21:45 · 260 阅读 · 0 评论 -
I-O多路转接之select
select系统调用是用来让我们的程序监视多个文件句柄的状态变化的。程序会停在select这里等待,直到被监视的文件句柄有一个或多个发生了状态改变。关于文件句柄,其实就是一个整数,我们最熟悉的句柄是0、1、2三个,0是标准输入,1是标准输出,2是标准错误输出。select函数原型#include <sys/select.h>int select(int nfds,fd_set *...原创 2019-06-17 21:47:50 · 197 阅读 · 0 评论 -
进程间通信
进程间通信主要包括管道、系统IPC(包括消息队列、信号量、信号、共享内存等)、以及套接字socket。管道:管道主要包括无名管道和命名管道:管道可用于具有亲缘关系的父子进程间的通信,有名管道除了具有管道所具有的功能外,它还允许无亲缘关系进程间的通信1.1 普通管道PIPE:1)它是半双工的(即数据只能在一个方向上流动),具有固定的读端和写端2)它只能用于具有亲缘关系的进程之间的通信(也是...原创 2019-06-04 22:45:40 · 193 阅读 · 0 评论 -
非阻塞IO
首先,我们知道,socket() 调用创建指定系列和指定类型的套接字。s = socket(family, type, protocol);socket将返回套接字句柄。套接字句柄即为文件描述符s,而一般情况下文件描述符默认都是阻塞的。为了满足某些时候的需要,我们使用fcntl函数来对其进行非阻塞的设置。函数原型#include <unistd.h>#include <...原创 2019-06-10 22:26:14 · 282 阅读 · 0 评论 -
fork与vfork的区别
fork的基础知识:fork:创建一个和当前进程映像一样的进程可以通过fork( )系统调用:#include <sys/types.h>#include <unistd.h>pid_t fork(void); 成功调用fork( )会创建一个新的进程,它几乎与调用fork( )的进程一模一样,这两个进程都会继续运行。在子进程中,成功的fork( )调用会返回0...原创 2019-05-31 23:51:33 · 895 阅读 · 0 评论 -
Linux虚拟地址空间
为什么有虚拟地址空间为了防止不同进程同一时刻在物理内存中运行而对物理内存的争夺和践踏,采用了虚拟内存。虚拟内存技术使得不同进程在运行过程中,它所看到的是自己独自占有了当前系统的4G内存。所有进程共享同一物理内存,每个进程只把自己目前需要的虚拟内存空间映射并存储到物理内存上。 事实上,在每个进程创建加载时,内核只是为进程“创建”了虚拟内存的布局,具体就是初始化进程控制表中内存相关的链表,实际上并...原创 2019-05-28 23:05:34 · 514 阅读 · 0 评论 -
进程状态
众所周知,linux是一个多用户,多任务的系统,可以同时运行多个用户的多个程序,这样就必然会产生很多的进。而对于一个进程而言,它可以有如下几个状态常见进程状态:R:运行状态(running)并不意味着进程是一定在运行中的,它表明进程要么在运行要么在运行队列里。其实准确的说,这个状态应该叫可执行状态,也就是说,处于此状态的这些进程的task_struct结构被放入对应CPU的可执行队列中(...原创 2019-05-22 18:29:37 · 389 阅读 · 1 评论 -
fork的使用
在牛客做题时遇到了这样一个问题:int main(){fork()||fork();}共创建几个进程:_____回想之前一直在这里跌倒从来没有爬起来过的经历,痛定思痛,来好好的思考了一下fork()函数的使用fork函数初识在linux中fork函数是非常重要的函数,它从已经存在的进程中创建一个新进程。新进程为子进程,而原进程为父进程。#include <unistd.h>...原创 2019-05-24 15:15:10 · 880 阅读 · 0 评论 -
gcc编译过程
程序的编译过程预处理(宏替换)将所有的#define删除,并展开所有的宏定义处理所有的条件预编译指令,如:#if,#ifdef,#elif,#else,#endif处理所有的#include预编译指令,将被包含的文件插进到该指令的位置(这个过程是递归的)删除所有的注释保留所有的#pragma编译器指令,因为编译器需要他们实例:gcc -E hello.c -o hello.i...原创 2019-05-07 12:56:27 · 292 阅读 · 0 评论 -
Makefile基本使用
为什么要使用Makefile会不会使用Makefile从一个侧面说明了是否具备完成大型工程的能力一个工程中的文件不计其数,按类型,功能,模块分别放在若干个目录中,Makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件选哟重新编译,以及更加复杂的操作Makefile带来的好处就是——“自动化编译”,一旦写好就只需要一个make命令整个工程就可以完全自动编译...原创 2019-05-08 20:41:23 · 530 阅读 · 0 评论 -
高级IO
title: 高级IOdate: 2019-04-15 23:36:10tags: linux在进入IO之前,我们需要先明白一个概念,IO实际上是分两步的——1.等待,2.数据拷贝正式进入IO时,先来通过一个例子简单理解一下五种IO模型:我们在食堂吃饭,需要点餐后等待做好才能吃到。现在有:1.A同学到达窗口时点了餐以后一动也不动什么都不做就在窗口等着叫号2.B同学点了餐就开始刷手机...原创 2019-04-20 15:18:45 · 278 阅读 · 0 评论 -
模拟实现cp命令
#include<stdio.h>#include<stdlib.h>#include<fcntl.h>void copy_file(char* srcfile ,char* desfile){ int src_fd = open(srcfile,O_RDONLY,0666); int des_fd = open(desfile,O_CREAT |...原创 2019-04-24 11:59:13 · 737 阅读 · 0 评论 -
DNS,ICMP协议及NAT技术
DNS(Domain Name System)DNS是一整套从域名映射到IP的系统在TCP/IP中使用IP地址和端口号来确定网络上的一台主机的一个程序,但是IP地址不方便记忆。所以引出了一种叫主机名的东西,是一个字符串,并且使用hosts文件来描述主机名与IP地址之间的关系 。也就是说,用户简单的输入一个主机名“host-a”通过查文件就可以对应到其IP地址。最初是通过互联网信息中心(SRI...原创 2019-04-23 01:29:13 · 1132 阅读 · 0 评论 -
Core_dump使用
Core Dump(核心转储):当一个进程要异常终止时,可以选择把进程的用户空间内存数据全部保存到磁盘上,文件名通常是core,叫做Core Dump(保存当前程序运行的数据以及调用栈信息),可以用于错误原因定位调试为什么不用gdb呢?答:如果程序运行错误,可以直接通过core文件来gdb调试(有些错误可能是偶然发生的,可能在gdb调试时并不会显露出来,只有在core dump记录之后才能快...原创 2019-03-06 16:14:14 · 580 阅读 · 0 评论