
LINUX
文章平均质量分 69
rongwenbin
这个作者很懒,什么都没留下…
展开
-
C/C++中的日期和时间[其中有strftime()的详细说明]
C/C++中的日期和时间[其中有strftime()的详细说明]2007-08-28 09:27 3584人阅读 评论(2)收藏 举报日历structc++calendartimermicrosoft1.概念在C/C++中,对字符串的操作有很多值得注意的问题,同样,C/C++对时间的操作也有许多值得大家注意的地方。最近,在技术群中有很多网友也多次问到过C++语言转载 2014-09-15 11:46:15 · 1973 阅读 · 0 评论 -
互斥锁、自旋锁和读写锁
一、互斥锁对于多线程的程序,访问冲突的问题是很普遍的,解决的办法是引入互斥锁(Mutex,MutualExclusive Lock),获得锁的线程可以完成“读-修改-写”的操作,然后释放锁给其它线程,没有获得锁的线程只能等待而不能访问共享数据,这样“读-修改-写”三步操作组成一个原子操作,要么都执行,要么都不执行,不会执行到中间被打断,也不会在其它处理器上并行做这个操作。Mutex用p转载 2014-01-17 14:45:44 · 2408 阅读 · 0 评论 -
怎样理解阻塞非阻塞与同步异步的区别?
因为中文语意的问题,很多时候确实会导致混用,而且语境不一样意义也可能不一样。如果只是从计算机编程这个角度说, 讨论最多的也是IO 模型 ,阻塞非阻塞和同步异步说的应该是不同的东西。阻塞非阻塞:可以简单理解为需要做一件事能不能立即得到返回应答,如果不能立即获得返回,需要等待,那就阻塞了,否则就可以理解为非阻塞。同步异步: 你总是做完一件再去做另一件,不管是否需要时间等待,这就是同步;异步转载 2014-01-14 09:43:36 · 725 阅读 · 1 评论 -
io阻塞与io非阻塞
handscup:这里要注意,其实非阻塞IO和异步IO的概念一样,此文所说的异步/异步,指的是线程,且不完全正确。正确的要看http://en.wikipedia.org/wiki/Asynchronous_I/O。-----------------------同步与异步IO、阻塞与非阻塞IO很多时候我们常常看到同步与异步,阻塞与非阻塞的出现。有的地方直接将同步与阻塞画上了等号。异转载 2014-01-13 15:58:05 · 553 阅读 · 0 评论 -
同步、异步、多线程与事件型综述
首先要了解什么是阻塞和阻塞式IO。线程在执行中如果遇到磁盘读写或网络通信(统称IO操作),通常要耗费较长的时间,这时操作系统会剥夺此线程的CPU控制权,使其暂停执行,同时将资源让给其他的工作线程,这种线程调度方式称为阻塞。当IO操作完毕时,操作系统将这个线程的阻塞状态解除,恢复其对CPU的控制权,令其继续执行。这种IO模式就是同步式IO或阻塞式IO。其次是了解什么是异步IO。相应地转载 2014-01-13 15:30:00 · 560 阅读 · 0 评论 -
IO中同步、异步与阻塞、非阻塞的区别
一、同步与异步同步/异步, 它们是消息的通知机制1. 概念解释A. 同步所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。按照这个定义,其实绝大多数函数都是同步调用(例如sin isdigit等)。但是一般而言,我们在说同步、异步的时候,特指那些需要其他部件协作或者需要一定时间完成的任务。最常见的例子就是 SendMessage。该函数转载 2014-01-13 17:43:59 · 528 阅读 · 0 评论 -
同步I/O(阻塞I/O),异步I/O(非阻塞)
异步io设计,是指设计者在通知内核进行io操作后,不会等待io动作完成,而是转而去完成其他工作,内核在io完成后再发信号告知调用者io已经完成,设计目的是提高效率。同步io设计,是指设计者必须确认io是否已经完成(不用管是成功的还是不成功的),再此基础上才能继续往下执行其他工作。显然,异步io设计不会显式调用read,write,select等,因为这些工作是由内核完成并告知你的。也就是说转载 2014-01-13 17:23:35 · 658 阅读 · 0 评论 -
网络IO之阻塞、非阻塞、同步、异步总结
1、前言 在网络编程中,阻塞、非阻塞、同步、异步经常被提到。unix网络编程第一卷第六章专门讨论五种不同的IO模型,Stevens讲的非常详细,我记得去年看第一遍时候,似懂非懂,没有深入理解。网上有详细的分析:http://blog.youkuaiyun.com/historyasamirror/article/details/5778378。我结合网上博客和书总结一下,加以区别,加深理解。2、数据转载 2014-01-13 17:15:24 · 597 阅读 · 0 评论 -
bad interpreter: No such file or directory
在Linux中执行.sh脚本,异常/bin/sh^M: bad interpreter: No such file ordirectory分析:这是不同系统编码格式引起的,在windows系统中编辑的.sh文件可能有不可见字符,所以在Linux系统下执行会报以上异常信息。解决:*1 在windows下转换*利用一些编辑器如UltraEdit或EditPlus等工具先将脚本编码转换,转载 2013-08-09 17:32:30 · 521 阅读 · 0 评论 -
用gdb调试coredump文件
用gdb调试coredump文件转载自:http://blog.chinaunix.net/u2/83905/showart_2134570.html在Unix系统下,应用程序崩溃,一般会产生core文件,如何根据core文件查找问题的所在,并做相应的分析和调试,是非常重要的。什么是Core Dump?Core的意思是内存, Dump的意思是扔出来, 堆出来.开 发和使用Unix程转载 2013-08-09 17:32:28 · 850 阅读 · 0 评论 -
ls-l列表信息详解
ls -l列表信息详解[root@localhost ~]# ls -l总计 152-rw-r--r-- 1 root root 2915 08-03 06:16 a-rw------- 1 root root 1086 07-29 18:35 anaconda-ks.cfg…………………………………………第1行:总计(total)Total后面的数字是指当前目录下所有文件所占用原创 2013-08-09 17:33:37 · 540 阅读 · 0 评论 -
gdb多线程调试
gdb 多线程调试http://hi.baidu.com/hcq11/blog/item/9f5bfc6e696209d680cb4a25.htmlhttp://hi.baidu.com/litto/blog/item/759389dd198111375882dd1e.html http://blogold.chinaunix.net/u3/94700/showart_2389432.转载 2013-08-09 17:33:39 · 457 阅读 · 0 评论 -
进程控制块PCB
进程控制块百科名片进程控制块的作用是使一个在多道程序环境下不能独立运行的程序(含数据),成为一个能独立运行的基本单位,一个能与其它进程并发执行的进程。或者说,OS是根据PCB来对并发执行的进程进行控制和管理的。PCB通常是系统内存占用区中的一个连续存区,它存放着操作系统用于描述进程情况及控制进程运行所需的全部信息,它使一个在多道程序环境下不能独立运行的程序成为一个能独立运行的基本单位,转载 2013-08-09 17:38:54 · 3148 阅读 · 0 评论 -
菜鸟备忘-操作系统-用户级线程和内…
用户级线程:从这张图上面可以看出来,用户级线程的管理是由应用程序的进程来完成的,而不关内核的事。在内核看来还是只有进程的概念,所以线程的调度也就可以通过应用程序自己设定,不用核心态的特权。但是也就是因为这样,在内核中没有线程的概念,如果一个线程进入内核,然后再系统调用的时候阻塞了,那么,核心只会把它作为整个进程阻塞了,也就是说这个进程中的所有线程都被阻塞了。线程状态和进程状态是独立的(从何转载 2013-08-09 17:38:43 · 917 阅读 · 0 评论 -
关于进程、线程和轻量级进程,线程…
线程模型:线程 : 进程n: 1 ,多个线程对应一个核心线程(进程)1:1, 一个线程对应一个进程m:n : 结合上面两种方式,如某些进程一一对应核内线程,其他线程完全在用户态实现在现代OS中,进程支持多线程。进程是资源管理的最小单元;而线程是程序执行的最小单元。一个进程的组成实体可以分为两大部分:线程集合资源集。进程中的线程是动态的对象;代表了进程指令的执行。资源,包括地址空间、打转载 2013-08-09 17:38:51 · 622 阅读 · 0 评论 -
细说linux挂载
纯粹针对刚刚解封开包的新新手,老鸟们请自觉绕行,否则浪费你的时间你非要逼我做谋杀犯可不光我的事你还没地方说理去。如果你正好是个崭新的新手,就耐心的花点时间看看吧,至少大概看看,不要在一个陌生又黑暗的到处碰壁,或张皇四顾,像个没头的苍蝇。现在耐心听我老人家絮絮叨叨没个完的,这点时间绝对值!续___________________________________________转载 2013-08-12 11:44:41 · 1018 阅读 · 0 评论 -
自旋锁应用
自旋锁一、为什么用自旋锁操作系统锁机制的基本原理,就是在某个锁操作过程中不能与其他锁操作交织执行,以免多个执行路径对内核中某些重要的数据及数据结构进行同时操作而造成混乱。在不同的系统环境中,根据系统特点和操作需要,锁机制可以用多种方式来实现。以Linux为例,其系统内核的锁机制一般通过3 种基本方式来实现,即原语、关中断和总线锁。在单CPU系统中,CPU 的读—修改—写原语可以转载 2014-01-17 15:33:50 · 1565 阅读 · 0 评论 -
管程的通俗理解
信号量机制的引入解决了进程同步的描述问题,但信号量的大量同步操作分散在各个进程中不便于管理,还有可能导致系统死锁。如:生产者消费者问题中将P、V颠倒可能死锁。为此Dijkstra于1971年提出:把所有进程对某一种临界资源的同步操作都集中起来,构成一个所谓的秘书进程。凡要访问该临界资源的进程,都需先报告秘书,由秘书来实现诸进程对同一临界资源的互斥使用。管程定义了一个数据结构和能为并发进转载 2014-01-17 16:24:31 · 3078 阅读 · 1 评论 -
左对齐与去掉月、日的前导零的方法
int money = 123.1$formatted = sprintf ("%06.2f", $money); // 此时变数 $ formatted 值为 "123.10"$formatted = sprintf ("%08.2f", $money); // 此时变数 $ formatted 值为 "00123.10"$formatted = sprintf ("%-08.2f"原创 2014-09-11 12:06:37 · 1758 阅读 · 0 评论 -
Linux两种定时执行任务方法介绍(at命令以及crontab服务)
在Linux下的两种定时执行任务的方法:at命令,以及crontab服务。 (1)at命令 假如我们只是想要让特定任务运行一次,那么,这时候就要用到at监控程序了。 设置at命令很简单,指示定运行的时间,那么就会在哪个时候运行。at类似打印 进程,会把任务放到/var/spool/at目录中,到指定时间运行它 。at命令相当于另一个shell,运行at time命令时,它发送一个个命令转载 2014-05-20 15:31:32 · 824 阅读 · 0 评论 -
makefile 中忽略错误参数.IGNORE、-k、-i的区别详解
.IGNORE用这个关键字指示的目标,在生成过程中出现错误时,会马上停止该目标和该目标的依赖目标的生成,但是会继续生成此目标之上的所有其它目标。 示例:有如下makefile文件:r1 : r2 r3 echo 1r2 : r21 echo 2 cat ew #ew文件不存在,故意让这条指定出错r21 : echo 21r3 :转载 2014-04-09 09:37:34 · 1679 阅读 · 0 评论 -
Makefile 自动生成依赖
虽然以前对Makefile有个基本概念,但是真正到自己去写一个哪怕是简单的Makefile时也会遇到不少的麻烦。 现在我有如下文件 dList.h dList.c memory.c debug.c debug.h test.c aaron.h 其中包含关系如下: aaron.h-->dList.h debug.h dList.c-->aaron.h debu转载 2014-04-02 15:30:36 · 616 阅读 · 0 评论 -
用ultraedit实现编码转换
BOM这里涉及到一个BOM(Byte Order Mark) 的概念.简单的讲,在Unicode标准中,为了标示文本文件的编码类型,可以在文本文件的开始插入几个特殊的byte,通过这几个特殊的byte,应用程序就可以鉴别文本文件使用的是那种编码了.那几个特殊的byte也被称之为BOM(参考:http://unicode.org/faq/utf_bom.html ).对于Unicode,转载 2014-04-16 17:35:53 · 20599 阅读 · 0 评论 -
Makefile中override 指示符
通常在执行make时,如果通过命令行定义了一个变量,那么它将替代在Makefile中出现的同名变量的定义。就是说,对于一个在Makefile中使用常规方式(使用“=”、“:=”或者“define”)定义的变量,我们可以在执行make时通过命令行方式重新指定这个变量的值,命令行指定的值将替代出现在Makefile中此变量的值。如果不希望命令行指定的变量值替代在Makefile中的变量定义,那么我们需转载 2014-05-04 16:42:14 · 614 阅读 · 0 评论 -
makefile中lpr -p $?
print:*.c # print 依赖所有的.c文件 lpr -p $? # $?列出比目标文件(print)更新的所有依赖文件,并由lpr命令提交给打印机。 touch print # 更新print的时间戳,如果没有则建立print文件。$@:表示规则中的目标文件集。在模式规则中,如果有多个目转载 2014-03-31 17:58:47 · 3520 阅读 · 2 评论 -
嵌套执行MAKE $(MAKE) -C subdir
这句是Makefile的规则:这里的$(MAKE)就相当于make,-C 选项的作用是指将当前工作目录转移到你所指定的位置。原创 2014-04-15 11:46:05 · 2929 阅读 · 0 评论 -
一个操作系统的实现:关于保护模式和实模式的跳转和段描述符高速缓冲寄存器
http://www.cnblogs.com/pang123hui/archive/2010/11/27/2309926.html 依旧是第三章,看的好慢哦,其实从实模式跳转到保护模式还是很好懂得,主要注意就是跳转指令: jmp dword SelectorCode32:0 //而不能是 jmp SelectorCode32:0 因为这时转载 2014-02-08 17:25:44 · 1309 阅读 · 0 评论 -
第3节 段机制和描述符
2.3.1 段机制 在80386的段机制中,逻辑地址由两部分组成,即段部分(选择符)及偏移部分。 段是形成逻辑地址到线性地址转换的基础。如果我们把段看成一个对象的话,那么对它的描述如下: (1) 段的基地址(Base Address):在线性地址空间中段的起始地址。 (2)段的界限(Limit):表示在逻辑地址中,段内可以使用的最大偏移量。 (3)段的属性(Attr转载 2014-02-08 17:04:50 · 823 阅读 · 1 评论 -
计算机开机启动过程
一、总过程PC机启动时ROM BIOS(Basic Input Output System)中的程序会把默认启动驱动器上的引导扇区代码和数据读入内存,而引导扇区代码则负责把操作系统加载程序和内核执行代码读入内存中,然后把控制权价交给操作系统加载程序(如果是硬盘启动,则是磁盘第一个扇区中位于主引导分区MBR-Master Boot Recoder内的引导加载程序Boot loder)去进一步准备转载 2014-02-07 11:31:48 · 1951 阅读 · 0 评论 -
僵尸进程
In UNIX System terminology, a process that has terminated,but whose parent has not yet waited for it, is called a zombie. 在UNIX 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他, 那么他将变成一个僵尸进程。 但是如果该进程的父进程已经先转载 2014-01-26 16:08:43 · 708 阅读 · 0 评论 -
自旋锁-搜搜百科
spin lock为了解决smp情况下资源的互斥访问,充分利用cpu的并行处理能力。原理smp多cpu系统情况下,一个cpu循环检测内存中某一个变量,待该变量符合一个条件以后原子的测试再修改后再跳出循环,进入临界区,保证对资源的操作序列化。自旋锁一般针对操作系统,应用程序库中的自旋锁不是为了保证cpu的互斥访问,因为应用程序总是可以被转载 2014-01-17 15:19:13 · 840 阅读 · 0 评论 -
深入理解linux自旋锁
最近在内核频繁使用了自旋锁,自旋锁如果使用不当,极易引起死锁,在此总结一下。自旋锁是一个互斥设备,它只有两个值:“锁定”和“解锁”。它通常实现为某个整数值中的某个位。希望获得某个特定锁得代码测试相关的位。如果锁可用,则“锁定”被设置,而代码继续进入临界区;相反,如果锁被其他人获得,则代码进入忙循环(而不是休眠,这也是自旋锁和一般锁的区别)并重复检查这个锁,直到该锁可用为止,这就是自旋的过程转载 2014-01-17 15:03:17 · 610 阅读 · 0 评论 -
读写锁
读写锁 (rwlock)功能特点简介读写锁实际是一种特殊的自旋锁,它把对共享资源的访问者划分成读者和写者,读者只对共享资源进行读访问,写者则需要对共享资源进行写操作。这种锁相对于自旋锁而言,能提高并发性,因为在多处理器系统中,它允许同时有多个读者来访问共享资源,最大可能的读者数为实际的逻辑CPU数。写者是排他性的,一个读写锁同时只能有一个写者或多个读者(与CPU数相关),但不能同时既有读者又有转载 2014-01-17 12:10:46 · 629 阅读 · 0 评论 -
su和sudo的区别与使用
一. 使用 su 命令临时切换用户身份1、 su的适用条件和威力su命令就是切换用户的工具,怎么理解呢?比如我们以普通用户beinan登录的,但要添加用户任务,执行useradd,beinan用户没有这个权限,而这个权限恰恰由root所拥有。解决办法无法有两个,一是退出beinan用户,重新以root用户登录,但这种办法并不是最好的;二是我们没有必要退出beinan用户,可以转载 2013-08-12 11:09:55 · 781 阅读 · 0 评论 -
Linux中Kill进程的N种方法
Linux中Kill进程的N种方法常规篇:首先,用ps查看进程,方法如下:$ ps -ef……smx 1822 1 0 11:38 ? 00:00:49 gnome-terminalsmx 1823 1822 0 11:38 ? 00:00:00 gnome-pty-helpersmx原创 2013-08-09 17:35:08 · 685 阅读 · 0 评论 -
GDB调试精粹及使用实例
一:列文件清单1. List(gdb) list line1,line2二:执行程序要想运行准备调试的程序,可使用run命令,在它后面可以跟随发给该程序的任何参数,包括标准输入和标准输出说明符()和外壳通配符(*、?、[、])在内。如果你使用不带参数的run命令,gdb就再次使用你给予前一条run命令的参数,这是很有用的。利用set args 命令就可以修改发送给程序的参数,而使用原创 2013-08-09 17:32:25 · 432 阅读 · 0 评论 -
详解linux内存磁盘初始化技术
详解linux内存磁盘初始化技术 来源:LUPA linux内存初始化技术(initrd)用于支持两阶段的系统引导过程,是在系统启动过程中被挂载的临时root文件系统(译者注:这里的root文件系统是指的根文件系统)。initrd包含很多可执行程序和驱动,并允许在临时的内存磁盘根文件系统被卸载,内存被释放后挂载真实的root文件转载 2013-07-02 15:47:46 · 989 阅读 · 0 评论 -
一种实现嵌入式Linux的新方法-ramdisk
引言在Linux操作系统中,有一项特殊的功能——初始化内存盘INITRD(INITial RamDisk)技术,而且内核支持压缩的文件系统映像。有了这两项功能,我们可以让Linux系统从小的初始化内存盘启动,并把系统内存的一部分作为根文件系统挂载,而且不使用交换分区(如果不运行XWindows这是完全可以的),即把Linux系统完全嵌入到内存中,而不依赖于任何其他硬盘。现在PC机内转载 2013-07-02 12:13:03 · 846 阅读 · 1 评论 -
嵌入式Linux中initrd的应用--浅析ramdisk、ramfs、initrd和initramfs
在Essential Linux.Device Drivers里看到这样一句话:在嵌入式系统开发过程中, initrd 和 initramfs 有时候也可被用作嵌入式设备上实际的根文件系统。看到这样的一句话很让我费解,因为似乎我理解为这样做能够提高一点嵌入式linux启动速度,我对此是非常地感兴趣。自此,就开始了我的解惑之旅。首先需要知道的是ramdisk和ramfshttp:转载 2013-07-02 15:04:18 · 833 阅读 · 0 评论 -
试分析linux中RamDisk工作原理
一 什么是RamDiskRam:内存,Disk:磁盘,在Linux中可以将一部分内存当作分区来使用,称之为RamDisk。对于一些经常被访问、并且不会被更改的文件,可以将它们通过RamDisk放在内存中,能够明显地提高系统性能。RamDisk工作于虚拟文件系统(VFS)层,不能格式化,但可以创建多个RamDisk。虽然现在硬盘价钱越来越便宜,但对于一些我们想让其访问速度很高的情况下,Ram转载 2013-07-02 12:06:23 · 733 阅读 · 0 评论