![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux
阿修罗it
科学是神圣的
展开
-
win10上VM12搭建虚拟机Ubuntu18.04及java开发环境
1、win10上VM12搭建虚拟机Ubuntu18.04时,需要先看看BIOS是否disable,INTER-V-64,同时看看360的安全中心是否启动了禁止。2、给新装的Ubuntu18.04设置root密码:Ubuntu初始安装没有给root用户设置密码解决办法就是给root用户设置一个初始密码,操作如下:ubuntu1804:~$sudo passwd root3、安装好虚拟机后,安装openssh,否则无法用FTP、putty等登陆。sudo apt-get openshh.原创 2020-10-03 13:00:05 · 186 阅读 · 0 评论 -
Linux写时拷贝技术(copy-on-write)
COW技术初窥: 在Linux程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调用,出于效率考虑,linux中引入了“写时复制“技术,也就是只有进程空间的各段的内容要发生变化时,才会将父进程的内容复制一份给子进程。 那么子进程的物理空间没有代码,怎么去取指令执行exec系统调用呢? 在fork之后exec之转载 2016-07-20 11:46:05 · 381 阅读 · 0 评论 -
自旋锁与互斥量
互斥量是阻塞锁,当某线程无法获取互斥量时,该线程会被直接挂起,该线程不再消耗CPU时间,当其他线程释放互斥量后,操作系统会激活那个被挂起的线程,让其投入运行。两种锁适用于不同场景:如果是多核处理器,如果预计线程等待锁的时间很短,短到比线程两次上下文切换时间要少的情况下,使用自旋锁是划算的。如果是多核处理器,如果预计线程等待锁的时间较长,至少比两次线程上下文切换的时间要长,建原创 2016-06-20 22:18:48 · 397 阅读 · 0 评论 -
[转]两种高性能I/O设计模式(Reactor/Proactor)的比较
[转]两种高性能I/O设计模式(Reactor/Proactor)的比较【原文地址:http://www.cppblog.com/pansunyou/archive/2011/01/26/io_design_patterns.html】综述这篇文章探讨并比较两种用于TCP服务器的高性能设计模式. 除了介绍现有的解决方案, 还提出了一种更具伸缩性,只需要维护一份代码并转载 2016-06-20 21:35:32 · 400 阅读 · 0 评论 -
Vim复制代码段
使用vim有时需要移动一大段代码,以前都是在gedit里复制粘贴,今天找了一下,方法如下:复制特定的某一段:把光标移到要复制的文本的头部,按下“v”,往后移动光标,光标所过之处的字符>都会高亮,移到欲复制文本的尾部后,按下“y”,高亮文本全部被复制到剪粘板。按下“p”粘贴到目的地。剪切特定的某一段:把光标移到要剪切的文本的头部,按下“v”,往后移动光标,光标所过之处的字符>都会高亮原创 2016-07-15 10:34:55 · 528 阅读 · 0 评论 -
linux中fork()函数详解
一、fork入门知识 一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。 一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来转载 2016-07-14 17:24:25 · 333 阅读 · 0 评论 -
Valgrind简单用法
Valgrind的主要作者Julian Seward刚获得了今年的Google-O'Reilly开源大奖之一──Best Tool Maker。让我们一起来看一下他的作品。Valgrind是运行在Linux上一套基于仿真技术的程序调试和分析工具,它包含一个内核──一个软件合成的CPU,和一系列的小工具,每个工具都可以完成一项任务──调试,分析,或测试等。Valgrind可以检测内存泄漏和内存违例,原创 2016-07-23 19:14:06 · 452 阅读 · 0 评论 -
linux select与poll的区别
linux下面的poll与select的区别:poll与select本质上是一样的,不同之处有如下:1. 每个进程使用的select有最大连接数限制,只能有FD_SETSIZE个,而poll没有这样的限制(采用链表存储);弊端:select和poll都需要有一个比较大的结构来存储所有的socket连接,每次有一个可用(可读可写或出错)的socket过来的时候,都需要遍历一遍结构,随原创 2016-06-06 22:07:18 · 1287 阅读 · 0 评论 -
Select机制--
Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect、accept、recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回)。可是使用Select就可以完成非阻塞(所谓非阻塞方式原创 2016-06-06 20:39:27 · 1115 阅读 · 1 评论 -
Vim编辑器设置缩进4字节
1.先打开配置文件,运行:sudo vim /etc/vim/vimrc 2.然后在文件的最后加上以下代码,保存,退出即可set smartindent set tabstop=4 set shiftwidth=4 set expandtab set softtabstop=4原创 2016-06-06 20:15:24 · 2380 阅读 · 0 评论 -
makefile文件的编写
简单的说,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至可以在makefile中执行shell脚本。makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。 关于程序的编译和链接 一般来说,无论是C还是C++,首先要把源文件编译成中间代码文原创 2016-06-05 11:52:31 · 299 阅读 · 0 评论 -
互斥锁与条件变量的配合!
互斥操作: 对共享资源的访问, 要对互斥量进行加锁, 如果互斥量已经上了锁, 调用线程会阻塞, 直到互斥量被解锁. 在完成了对共享资源的访问后, 要对互斥量进行解锁。 死锁主要发生在有多个依赖锁存在时, 会在一个线程试图以与另一个线程相反顺序锁住互斥量时发生. 如何避免死锁是使用互斥量应该格外注意的东西。 总体来讲, 有几个不成文的基本原则: 对共享资源操作前一转载 2016-06-25 13:28:41 · 339 阅读 · 0 评论 -
linux基础编程 多线程中的互斥锁 pthread_mutex_lock
pthread_mutex.h头文件[cpp] view plaincopy#ifndef __SEM_UTIL_H__ #define __SEM_UTIL_H__ typedef void* SemHandl_t; SemHandl_t MakeSem(); /// int SemRelea原创 2016-05-21 13:45:29 · 768 阅读 · 0 评论 -
gcc编译C++程序
单个源文件生成可执行程序下面是一个保存在文件 helloworld.cpp 中一个简单的 C++ 程序的代码: /* helloworld.cpp */#include int main(int argc,char *argv[]){ std::cout return(0);}程序使用定义在头文件 iostream 中的 cout,向标准输出写入一原创 2016-03-24 19:22:56 · 287 阅读 · 0 评论 -
最全面的linux信号量解析
信号量一.什么是信号量信号量的使用主要是用来保护共享资源,使得资源在一个时刻只有一个进程(线程)所拥有。信号量的值为正的时候,说明它空闲。所测试的线程可以锁定而使用它。若为0,说明它被占用,测试的线程要进入睡眠队列中,等待被唤醒。二.信号量的分类在学习信号量之前,我们必须先知道——Linux提供两种信号量:(1) 内核信号量,由内核控制路径使用(2) 用户态进程转载 2015-09-23 16:55:16 · 346 阅读 · 0 评论