![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux
Coding_Fly_
满招损,谦得益
展开
-
什么是线程不安全?
什么是线程不安全?线程不安全是指多个线程在访问临界资源(多个线程都能访问到的资源)时,由于访问非原子性导致的产生结果和预期结果不同。比如多个线程在执行i++的时候,假设i最初为5,如果此时有两个线程进行i++操作,理论上第二个线程执行完之后得到的数据是i = 7,CPU先从内存中将数据获取读入寄存器中,在第一个线程A时间片到了被切换出来,上下文信息保存寄存器的值,程序计数器保存下一条指令,返回给了控制该线程task_struct中,此时切换到线程B,CPU又会执行线程B,线程B会从内存中加载这个值,进行原创 2020-12-06 22:02:49 · 1636 阅读 · 1 评论 -
进程信号------信号量
信号量信号量不是为了传输数据,而是为了进程控制信号量的实现 : 计数器 + PCB等待队列PCB等待队列是放获取不到信号量的进程互斥:如何保证互斥?3.1:计数器的值只能为0或者1,当计数器的值为0的时候,表示资源不可以被访问,当计数器值为1的时候表示资源可以被访问3.2:初始计数器值为1,表示可以访问资源3.3:获取信号量3.3.1 对信号量中的计数器进行预减操作(减1)3.3.2 判断预减之后的值小于0:不能信号量,被放到了PCB等待队列中进行等待4等于0:可以获取到信号量,对信原创 2020-12-06 15:54:52 · 320 阅读 · 1 评论 -
环境变量
为什么ls程序可以在任意目录下运行,而我们编译出来的代码只能在当前编译出来的目录下运行?环境变量:常见的环境变量HOME : 保护用户家目录的环境变量SHELL:保存当前使用的命令行解释器PATH:保存可执行程序路径的环境变量查看环境变量:echo $[环境变量名称]3:查看环境变量echo $[环境变量名称]4:新增环境变量的值export :可以更改或者增加环境变量的值万能公式: export[环境变量名] = $[环境变量名称]:[新增加的环境变量的值]当前命令行原创 2020-11-16 22:12:08 · 175 阅读 · 0 评论 -
Centos下git 的配置
转自https://www.cnblogs.com/daniaofighter/p/9452661.html转载 2020-10-17 09:23:06 · 151 阅读 · 0 评论 -
linux命令
route : 修改路由tracert : 跟踪路由ping : 检查网络是否连通netstat: 控制台命令,监控TCP/IP 网络很有用工具,显示路由表、实际网络连接以及每个网络设备的状态信息。linux中存放系统所需要的配置文件和子目录是 /etc/var 存放日志文件/root 超级用户主目录/home 使用者家目录Linux虚拟内存模型,使得每个进程都已为自己拥有整个内存空间linux下,查看物理内存 cat/proc/meminfo在shell环境下,如何查看远程linux系原创 2020-10-14 17:07:53 · 64 阅读 · 0 评论 -
客户端服务器端如何实现交互
Server.c:1:socket()建立套接字2:bind()绑定IP 端口号 (struct aockaddr_in addr 初始化)3:listen()指定最大同时发起连接数4:accept()阻塞等待客户端发起连接5:read();6:数据处理;7:write()回写给客户端8:close();socket创建出来的也是个文件,也需要关闭文件Client.c1:socket()2:可以调用bind(),但是操作系统会隐式绑定,不需要;3:connect():发起连接请求.原创 2020-07-23 12:46:29 · 525 阅读 · 0 评论 -
gcc/g++运行程序时出现的错误
在windows下的程序放在linux下g++跑不起来了,其中该包含的头文件我也都引入了,但是就是报错 undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string()'heavy_load.cpp:(.text+0x97): undefined reference to `std::basic_istream&l原创 2020-06-14 20:22:22 · 579 阅读 · 0 评论 -
一文了解深浅拷贝
提及深浅拷贝,基础但是不是很容易掌握。因为涉及=运算符重载,涉及到内存管理,涉及到对象的析构等等。直到我看了《新标准C++程序设计》这本书后,让我对这个概念年醍醐灌顶。原创 2020-06-14 02:35:08 · 168 阅读 · 0 评论 -
ext2文件系统结构
对于一个磁盘分区来说,在其被指定为相应的文件系统后,整个分区可以被分为1024,2048,4096字节大小的块。根据块的不同可以分为(1)超级块:整个文件系统的第一块空间,包括整个文件系统的基本信息(块大小,指向空间inode和数据块的指针);(2)Inode块,**文件系统索引。是文件系统最基本单元**,包括文件系统中文件的基本属性、存放数据位置等相关信息;(3)数据块:具体存放数据的位置区域,为了提高目录访问的效率,Linux还提供了表达路径与Inode对应关系的dentry结构。描述了路径信息原创 2020-06-14 01:45:58 · 231 阅读 · 0 评论 -
进程属性
1:进程号(PID)进程号是系统维护的唯一一个标识一个进程的正整数,用户层无法对其进行修改。Linux下操作系统的第一个进程为init进程,其他进程在此基础上增长,可以使用ps aux 查看当前系统的所有进程的基本属性。例:我们通过getpid()函数可以获得当前进程的pid该函数包含在#include<unistd.h>函数中pid_t实际上就是int,用来记录进程号的。只不过在这里为了增加程序可读性进程了自定义我们模拟实现获取pid可以自己写个程序源码:#include原创 2020-06-13 20:14:28 · 2032 阅读 · 0 评论 -
主函数源码
主函数流程1:参数检查。参数个数不能少于两个,如果参数个数大于等于两个,依次列出所有参数信息。2:检测指定参数的文件是否存在,如果存在,读取文件属性,如果是普通文件,列读文件属性3:如果是目录文件,循环查找目录下的文件,采用简单的插入排序构建按序链表,并读取各文件信息,然后列出整个链表文件的所有信息。来看源码struct stat stat_info;原创 2020-06-12 10:54:57 · 278 阅读 · 0 评论 -
如何自己实现程序查看文件的读写权限
利用stat函数实现int stat(const char *path, struct stat *buf)我们来看程序 8 #define N_BITS 3 9 10 int main(int argc,char *argv[]) 11 { 12 unsigned int i,mask = 0700; 13 struct stat buff;W> 14 static char *perm[] = {"---","--x","-w-",原创 2020-06-11 23:57:31 · 902 阅读 · 1 评论 -
如何向面试官讲清楚程序编译过程
源文件到产生效果是个很复杂的过程大体步骤分为编译和链接你如果只是背,这四点千万不要忽略预处理(也称预编译,Preprocessing)、编译(Compilation)、汇编(Assembly)和链接(Linking)。首先是个大的过程,编译。编译分为预编译和编译加汇编预处理过程中,对源代码文件中的文件包含(include)、预编译语句(如宏定义define等)进行分析。接着调用cc1进行编译,这个阶段根据输入文件生成以.i为后缀的目标文件。汇编过程是针对汇编语言的步骤,调用as进行工作,一般来讲原创 2020-06-10 00:06:12 · 231 阅读 · 0 评论 -
进程与线程
什么是进程?简单来说进程就时一个正在执行的程序。这就够了通过这个描述来深入挖掘。我们来试想,如果一个进程(可以理解成程序),从启动到终止,这期间会一直处于运行状态吗?我们现在使用程序可不是说只有这一个程序运行。但是对于CPU而言,在某一个瞬间,CPU只能运行一个进程。想解决多个程序运行问题,就涉及到一个概念,多道程序设计。我们打开我们电脑任务管理器,我们可以看到我们电脑的进程非常多,但是我们知道CPU在某个瞬间只能运行一个进程。我们知道CPU的运算速度是非常快的。比如P4 3G,每秒最高运行3G次,原创 2020-06-09 17:08:56 · 809 阅读 · 0 评论 -
linux中的top指令
实施top指令后我们看到了如下top:查看服务器进程占的资源PR:进程优先级PID:进程IDUSER:进程对应的用户VIRT:虚拟内存 申请500M,实际使用了200M,虚拟内存就是500MRES:常驻内存: 申请500M,实际使用了200M,常驻内存就是200MSHR:共享内存:申请500M,实际使用了200M但是还包含对其他进程的调用开销需要扣除计算一个进程实际使用内存 = RES - SHRCOMMAND:进程名称或者路径...原创 2020-06-02 16:36:59 · 125 阅读 · 0 评论 -
Linux下的ps指令
ps -e 列出当前全部进程ps -f 显示出全部列一般是ps -ef来看显示结果UID:该进程的用户idPID:进程idPPID:该进程的父进程如果一个程序的父进程找不到,该程序的进程就称为僵尸进程C:CPU占用率,形式是个百分数STIME:该进程的一个启动时间TTY:终端设备。出现**?**是因为这些进程不是由终端发起的,所以系统不知道是哪个终端发起的。TIME:进程执行时间CMD:改进程的名称还或者对应路径经常查看进程和grep连用...原创 2020-06-02 12:00:52 · 185 阅读 · 0 评论