linux
文章平均质量分 73
孤狼长弓
这个作者很懒,什么都没留下…
展开
-
简单介绍同步,异步,阻塞,非阻塞
同步所谓同步,就是调用一个功能,在没有得到结果之前,该调用就不返回,死等结果。也就是必须一件一件事做,等前一件做完了才能做下一件事。举例 就像早上起床后,先洗涮,然后才能吃饭,不能在洗涮没有完成时就开始吃饭。异步就是我调用一个功能,不需要知道该功能结果,该功能有结果后通知我(回调通知)。阻塞阻塞调用是指调用结果返回之前,当前线程会被挂起(线程进入非可执行状态,在这个状态下,cpu不会给线程分配时间原创 2015-12-08 23:42:20 · 193 阅读 · 0 评论 -
简述C、C++程序编译的内存分配情况
C、C++中内存分配方式可以分为三种1.从静态存储区域分配: 内存在程序编译时就已经分配好,这块内存在程序的整个运行期间都存在速度快,不容易出错,因为有系统会善后。例如全局变量,static变量等。2.在栈上分配: 在执行函数时,函数内局部变量的存储单元都在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内原创 2015-11-29 21:26:41 · 2651 阅读 · 0 评论 -
浅谈const,static,extern
关于constconst有什么用 const用来定义一个只读的变量或对象。主要优点 便于类型检查,同宏定义一样可以方便地进行参数的修改和调整,节省空间,避免不必要的内存分配,可为函数重载提供参考。说明 const修饰函数参数,是一种编程规范的要求,便于阅读,一看即知这个参数不能被改变,实现时不易出错。关于staticstatic有什么作用 在C中 主要用于定义全局静态变量,定义局部静态变量原创 2015-11-29 22:02:05 · 330 阅读 · 0 评论 -
简述strcpy、sprintf与memcpy的区别
操作对象不同1.strcpy的两个操作对象均为字符串 2.sprintf的操作源对象可以是多种数据类型,目的操作对象是字符串 3.memcpy的两个对象就是两个任意可操作的内存地址,并不限于何种数据类型。执行效率不同memcpy最高,strcpy次之,sprintf的效率最低。实现功能不同1.strcpy主要实现字符串变量间的拷贝 2.sprintf主要实现其他数据类型格式到字符串的转化 3原创 2015-11-29 21:40:48 · 1757 阅读 · 0 评论 -
Heap与stack的差别
1.Stack的空间由操作系统自动分配/释放,Heap上的空间手动分配/释放。 2.Stack空间有限,Heap是很大的自由存储区 3.C中的malloc函数分配的内存空间即在堆上,C++中对应的是new操作符。 4.程序在编译期对变量和函数分配内存都在栈上进行,且程序运行过程中函数调用时参数的传递也在栈上进行原创 2015-11-29 22:28:11 · 438 阅读 · 0 评论 -
进程和线程的差别
什么是进程进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。它不只是程序的代码,还包括当前的活动,通过程序计数器的值和处理寄存器的内容来表示。什么是线程线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。线程是进原创 2015-12-01 23:55:25 · 401 阅读 · 0 评论 -
/etc/hosts.conf
作用指定如何解析主机域名,可设置网络安全。默认文件内容默认情况,/etc/hosts.conf 文件有如下内容 order hosts,bind multi on参数说明 order 是解析顺序的参数,order hosts,bind,nis ,说明先查询解析/etc/hosts文件,然后DNS,再是NIS。multi 表示是否运行/etc/hosts文件允许主机指定多个原创 2016-01-10 15:45:49 · 9653 阅读 · 0 评论 -
Linux下的五种I/O模型
阻塞I/O简介 应用程序调用一个IO函数,导致应用程序阻塞,等待数据准备好。 如果数据没有准备好,一直等待….数据准备好了,从内核拷贝到用户空间,IO函数返回成功指示。也就是说进程会一直阻塞,直到数据拷贝完成。模型图示非阻塞IO模型简介 非阻塞IO通过进程反复调用IO函数(多次系统调用,并马上返回);也就是说在数据拷贝的过程中,进程是阻塞的。模型图示 我们把一个SOCKET接口设置为非阻塞就原创 2015-12-09 00:05:00 · 405 阅读 · 0 评论 -
常用Linux系统命令
系统uname -a 查看内核/操作系统/CPU信息head -n 1 /etc/issue 查看操作系统版本cat /proc/cpuinfo 查看CPU信息hostname 查看计算机名lspci -tv 列出所有PCI设备lsusb -tv 列出所有USB设备lsmod 列出加载的内核模块env 查看环境变量资源free -m 查看内存使用量和交换区使用量原创 2016-01-10 16:22:46 · 227 阅读 · 0 评论 -
简单认识Yum
众所周知,Redhat和Fedora的软件安装命令是rpm,但是用rpm安装软件最大的麻烦就是需要手动寻找安装该软件所需要的一系列依赖关系, 超级麻烦不说,要是软件不用了需要卸载的话由于卸载掉了某个依赖关系而导致其他的软件不能用是非常恼人的。令人高兴的是,Fedora终于推出了类似于 ubuntu中的apt的命令yum,令Fedora的软件安装变得简单容易。关于配置文件yum的一切配置信息都储存在一原创 2016-01-10 16:53:46 · 297 阅读 · 0 评论 -
linux中的sleep与alarm
sleep#include <unistd.h>unsigned int sleep(unsigned int seconds);此函数使调用进程被挂起,直到满足以下条件之一 (1)已经过了seconds所指定的墙上时钟时间 (2)调用进程捕捉到一个信号并从信号处理程序返回 注:由于其他系统活动,实际返回时间比所要求的会迟一些,像alarm一样。sleep的返回值 (1)在上述第一种情形中原创 2016-01-10 17:18:42 · 1023 阅读 · 0 评论 -
sizeof和strlen的区别
sizeof和strlen的区别1. sizeof是一个操作符,strlen是库函数。2. sizeof的参数可以是数据的类型,也可以是变量,而strlen只能以结尾为"\0"的字符串作参数。3. 编译器在编译时就计算出了sizeof的结果。而strlen函数必须在运行时才能计算出来。4. sizeof计算的是数据类型占内存的大小,而strlen计算的是字符串实际的长度。5. 数组做size原创 2015-11-29 20:56:52 · 316 阅读 · 0 评论 -
static变量与普通变量的区别
static全局变量与普通的全局变量全局变量(外部变量)的说明之前再冠以static就构成了静态的全局变量.全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程原创 2015-11-29 22:22:38 · 9083 阅读 · 0 评论 -
select、poll、epoll简介
epoll跟select都能提供多路I/O复用的解决方案。在现在的Linux内核里有都能够支持,其中epoll是Linux所特有,而select则应该是POSIX所规定,一般操作系统均有实现select本质 通过设置或者检查存放fd标志位的数据结构来进行下一步处理。缺点 1.单个进程可监视的fd数量受到了限制,在32位机器上,他所能管理的fd数量最大为1024;2.对socket进行扫描时是线性原创 2015-12-02 21:51:20 · 324 阅读 · 0 评论 -
linux系统目录结构
目录树状图:目录解释:/bin: bin是Binary的缩写, 这个目录存放着最经常使用的命令。/boot: 这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。/dev : dev是Device(设备)的缩写, 该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。/etc: 这个目录用来存放所有的系统管理所需要的配置文件和子原创 2015-11-17 23:05:07 · 337 阅读 · 0 评论 -
linux启动过程
linux启动流程:原创 2015-11-18 08:42:10 · 307 阅读 · 0 评论 -
利用xShell实现windows与虚拟机的文件交换
软件版本: linux:ubuntu1204 xshell:5.0.0.24操作方式: 1.在Linux主机上,安装上传下载工具包rz及sz sudo apt-get install lrzsz2.使用我们常用的Xshell登录工具,新建立一个远程会话,填写ip地址及用户名密码后,选择最下面的ZMODEM,填写下载的路径,加载的路径;2个路径可以一样也可以不一样,操作如下图:操作命令: 1原创 2015-11-18 23:15:16 · 960 阅读 · 0 评论 -
野指针产生原因及解决办法
情况一原因 指针变量声明时没有被初始化。解决办法 指针声明时初始化,可以是具体的地址值,也可让它指向NULL。情况二原因 指针 p 被 free 或者 delete 之后,没有置为 NULL。解决办法 指针指向的内存空间被释放后指针应该指向NULL。情况三原因 指针操作超越了变量的作用范原创 2015-11-29 10:11:10 · 7214 阅读 · 3 评论 -
常见的预处理指令
预处理指令 #空指令,无任何效果 #include包含一个源代码文件 #define定义宏 #undef取消已定义的宏 #if如果给定条件为真,则编译下面代码 #ifdef如果宏已经定义,则编译下面代码 #ifndef如果宏没有定义,则编译下面代码 #elif如果前面的#if给定条件不为真,当前条件为真,则编译下面代码原创 2015-11-29 09:33:13 · 410 阅读 · 0 评论 -
关于预编译
什么是预编译预编译就是指程序执行前的一些预处理工作,主要指#表示的。何时需要预编译1.总是使用不经常改动的大型代码体。 2.程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。原创 2015-11-29 09:41:07 · 428 阅读 · 0 评论 -
变量的声明和定义有什么区别
变量的声明和定义有什么区别1.为变量分配地址和存储空间的称为定义,不分配地址的称为声明。2.一个变量可以在多个地方声明,但是只在一个地方定义。加入extern修饰的是变量的声明,说明 此变量将在文件以外或在文件后面部分定义。注意:很多时候一个变量,只是声明不分配内存空间直到具体使用时才初始化,分配内存空间,如外部变量。原创 2015-11-29 20:47:34 · 1150 阅读 · 0 评论 -
Linux进程的五个段
下面我们来简单归纳一下进程对应的内存空间中所包含的5种不同的数据区都是干什么的。原创 2015-11-28 23:02:47 · 411 阅读 · 0 评论 -
typedef和define有什么区别
用法不同typedef用来定义一种数据类型的别名,增强程序的可读性。define主要用来定义常量,以及书写复杂使用频繁的宏。执行时间不同typedef是编译过程的一部分,有类型检查的功能。define是宏定义,是预编译的部分,其发生在编译之前,只是简单的进行字符串的替换,不进行类型的检查。作用域不同typedef有作用域限定。define不受作用域约束,只要是在define声明后的引用都是正确的。对原创 2015-11-29 21:51:02 · 422 阅读 · 0 评论 -
临界区(Critical section)与互斥量(Mutex)
临界区(Critical Section)保证在某一时刻只有一个线程能访问数据的简便办法。在任意时刻只允许一个线程对共享资源进行访问。如果有多个线程试图同时访问临界区,那么在有一个线程进入后其他所有试图访问此临界区的线程将被挂起,并一直持续到进入临界区的线程离开。临界区在被释放后,其他线程可以继续抢占,并以此达到用原子方式操作共享资源的目的。 临界区包含两个操作原语 EnterCriti原创 2016-01-10 18:19:53 · 1397 阅读 · 0 评论