操作系统
文章平均质量分 83
用心倾听
程序狂 爱逗你玩
展开
-
Linux 进程通信之 ——信号和信号量总结
现在最常用的进程间通信的方式有:信号,信号量,消息队列,共享内存。 所谓进程通信,就是不同进程之间进行一些"接触",这种接触有简单,也有复杂。机制不同,复杂度也不一样。通信是一个广义上的意义,不仅仅指传递一些massege。他们的使用方法是基本相同的,所以只要掌握了一种的使用方法,然后记住其他的使用方法就可以了。 1. 信号 在我学习的内容中,主转载 2016-05-09 16:17:57 · 735 阅读 · 0 评论 -
vhdl 变量与信号区别 type符号使用
1.VHDL描述的是硬件,而不是软件。在所有的设计开始之前在心目中都应当有一个硬件框图儿不是软件流程图,要用硬件的思想而非软件的思想使用VHDL。这一点是使用VHDL最基本的原则。2.VHDL中的数据对象有信号,变量和常量。常量一般用来提高代码的可读性,易维护和修改性。关键是要弄清楚信号和变量的区别,首先信号我们可以把它理解成实际的硬件连线而变量不能,也就是说信号综合以后有实际的对应硬件而变量转载 2013-05-23 22:08:15 · 6867 阅读 · 0 评论 -
more 命令 用于分屏显示
more命令一般用于显示内容超过一屏的文件。其他命令经常和more匹配使用,但more命令也客单独使用。(1)其他命令和more命令匹配使用:格式: 其他命令格式|more范例:[root@redhat9/]ls -al|more%ls查看文件列表时,文件太多,一屏显示不完,需要一屏一屏地显示就要用more(2)more 命令单独使用:格式:more [选项]转载 2013-05-11 10:51:11 · 1126 阅读 · 0 评论 -
vim添加显示行号,自动缩进功能
本文对vim的设置仅仅针对UBUNTU与Fedora系统,其他LINUX版本我没有实验过,敬请读者谅解!谢谢在UBUNTU中vim的配置文件存放在/etc/vim目录中,配置文件名为vimrc在Fedora中vim的配置文件存放在/etc目录中,配置文件名为vimrc在终端 输入以下命令来编辑vimrc配置文件:sudo vim /etc/vim/vimrc或者 s转载 2013-05-11 10:20:40 · 466 阅读 · 0 评论 -
shell内部命令
bash命令解释套装程序包含了一些内部命令。内部命令在目录列表时是看不见的,它们由Shell本身提供。常用的内部命令有:echo,eval,exec,export,readonly, read, shift, wait和点(.)。fg bg jobs cd exit history下面简单介绍其命令格式和功能。 1.echo 命令格式:echoarg 功能:在屏幕转载 2013-05-10 20:31:28 · 630 阅读 · 0 评论 -
Linux system函数返回值
status = system("./test.sh"); 1、先统一两个说法:(1)system返回值:指调用system函数后的返回值,比如上例中status为system返回值(2)shell返回值:指system所调用的shell命令的返回值,比如上例中,test.sh中返回的值为shell返回值。2、如何正确判断test.sh是否正确执行?仅判断sta转载 2013-05-06 23:17:44 · 530 阅读 · 0 评论 -
Linux date命令的用法
在linux shell编程中,经常用到日期的加减运算以前都是自己通过expr函数计算,很麻烦其实date命令本身提供了日期的加减运算非常方便。例如:得到昨天的时间date +%Y%m%d --date="-1 day"date 用法: date [OPTION]... [+FORMAT]date [-u|--utc|--universal] [MMDDhhmm[[CC]Y转载 2013-05-06 22:00:18 · 422 阅读 · 0 评论 -
segmentation fault
Segment fault 之所以能够流行于世,是与Glibc库中基本所有的函数都默认型参指针为非空有着密切关系的。来自:http://oss.lzu.edu.cn/blog/article.php?uid_7/tid_700.html#comment背景最近一段时间在linux下用C做一些学习和开发,但是由于经验不足,问题多多。而段错误就是让我非常头痛的一个问题。转载 2013-05-17 16:01:47 · 608 阅读 · 0 评论 -
造成segment fault,产生core dump的可能原因
1.内存访问越界a) 由于使用错误的下标,导致数组访问越界b) 搜索字符串时,依靠字符串结束符来判断字符串是否结束,但是字符串没有正常的使用结束符c) 使用strcpy, strcat, sprintf, strcmp, strcasecmp等字符串操作函数,将目标字符串读/写爆。应该使用strncpy, strlcpy, strncat, strlcat, snprintf, str转载 2013-05-17 15:54:58 · 1004 阅读 · 0 评论 -
fgets和gets的区别
在编程中发现gets和fgets一些区别总结一下;1、 fgets比gets安全,使用gets编译时会警告为了安全,gets少用,因为其没有指定输入字符的大小,限制输入缓冲区得大小,如果输入的字符大于定义的数组长度,会发生内存越界,堆栈溢出。后果非常怕怕fgets会指定大小,如果超出数组大小,会自动根据定义数组的长度截断。(redhat9.0实验并不是如此,不知为何,照样能转载 2013-05-16 20:56:28 · 1137 阅读 · 0 评论 -
times系统调用的例子
引用 #include clock_t times (struct tms * buf ); 函数功能 :times系统调用可以得到进程所消耗的时间,man 2 times可以得到times系统调用的帮助。说明 :times() 函数返回从过去一个任意的时间点所经过的时钟数。返回值可能会超出 clock_t (一般为 long 型) 的范围(溢出)。如果发生错误转载 2013-04-19 23:41:11 · 1643 阅读 · 0 评论 -
sysconf、pathconf和fpathconf函数
1. 限制Unix系统实现定义了很多幻数和常量,这些在不同程度上依从POSIX,也遵从POSIX.1标准。这就有助于软件的可移植性。以下两种类型的限制是必须的:1) 编译时限制(例如,短整型的最大值是什么?)2) 运行时限制(例如,文件名可以有多少个字符?)编译时限制可在头文件中定义,程序在编译时可以包含头文件。但是,运行时限制则要求进程调用一个函数以获取此种限制值。为了解转载 2013-04-19 21:13:36 · 905 阅读 · 0 评论 -
linux 统计 程序运行时间
我们有时需要得到程序的运行时间,但我们也要知道,根本不可能精确测量某一个程序运行的确切时间[3],文献[4]中说的很明白,现摘录如下。 我们平时常用的测量运行时间的方法并不是那么精确的,换句话说,想精确获取程序运行时间并不是那么容易的。也许你会想,程序不就是一条条指令么,每一条指令序列都有固定执行时间,为什么不好算?真实情况下,我们的计算机并不是只运行一个程序的,进程的切换,各种转载 2013-04-19 22:10:02 · 1221 阅读 · 0 评论 -
shell命令解释器心得
经过了为期一周的shell命令解释器项目,基本达到了预期的要求。回顾这一周的写程序过程,可以按时间来总结一下这次项目。第一天是写一个简单的shell解释器。这次的项目完全是用c语言编写的,而自身暴露出的问题就是c语言的精华—指针。由于c中是大量的对字符串操作,所以指针起着很关键的作用。首先这个程序需要是一个死循环,然后打印出命令提示符。取得的命令放在定义好的数组里面,可以使用getc(),转载 2013-05-10 17:30:26 · 1465 阅读 · 0 评论 -
ubuntu下编译c程序之多个 .c文件关联
当编译需要将多个 .c 文件关联时,即需要建立静态库。静态库是编译器生成的普通.o文件的集合。链接一个程序时用库中的对象文件还是目录中的对象文件都是一样的,静态库亦称归档文件(archive),管理这种工具的文件叫ar。要构建一个库,首先要编译出库中需要的对象模块。例如:有三个文件,file1.c file2.c main.cmain.c 文件引用了file1.c和file2.c中的函数,转载 2013-05-11 18:04:58 · 2051 阅读 · 0 评论 -
在Ubuntu gcc下编译c程序,错误如下: test.c:3: error: expected ';', ',' or ')' before '&' token
函数原型如下:int inCommand(char *str,int& flag);将引用参数改为:int inCommand(char *str,int flag);后编译通过原创 2013-05-11 16:54:21 · 1866 阅读 · 0 评论 -
Linux的inode、软链接、硬链接
关于inode、软硬链接的问题,最近几天看了很多资料,惊奇的发现竟然资料之间有所冲突。有的甚至自己和自己都有冲突。现在感觉自己已经初步理解了这三个概念,发布在此,希望可以减少网络上此类错误文章对新手的误导。 ln -s myfile.txt mylink //建立符号链接,即软链接 ln myfile.txt hardlink //建转载 2016-05-09 16:04:05 · 864 阅读 · 0 评论 -
Linux多线程编程(创建线程)
创建线程创建线程的函数是pthread_create,具体定义如下:[cpp] view plain copy#include int pthread_create(pthread_t *thread, // 新创建的线程ID const转载 2016-04-19 16:07:36 · 443 阅读 · 0 评论 -
c c++中数据在内存的存储
一、 在c中分为这几个存储区 1.栈 - 由编译器自动分配释放 2.堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收 3.全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。- 程序结束释放 4.另外还有一个专门放常量的地方。- 程序结束转载 2014-03-27 23:47:08 · 906 阅读 · 0 评论 -
在linux(ubuntu )上安装配置weka
1. 下载java vm。在命令行输入 wget --no-cookie --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F" http://download.oracle.com/otn-pub/java/jdk/7u25-b15/jdk-7u25-linux-i586.tar.gz 注意命令行中参数表示带cookie的转载 2014-02-28 11:14:55 · 2309 阅读 · 0 评论 -
ubuntu 安装jdk7小结
ubuntu 安装jdk7,现在来总结一下:第一步:下载jdk-7-linux-i586.tar.gz直接在ORACLE的官网中下载就可以:http://www.oracle.com/technetwork/java/javase/downloads/java-se-jdk-7-download-432154.htmlPS:要注意系统版本的选择,32位 还是 64位,uname转载 2014-02-28 11:08:48 · 580 阅读 · 0 评论 -
vm-install vmware tools安装
在XP下安装完VMware虚拟机后启动Ubuntu,窗口很小,需要安装vm-install vmware tools才能自动适配合适的窗口大小,为了安装这个东东浪费了我好几个小时时间,现在把我的步骤记录下来,以便后续同仁遇到相同问题避免麻烦:11、点击VM 下的 install VMware Tools ,然后会提示make sure that you are logged in to th转载 2013-11-22 13:06:13 · 772 阅读 · 0 评论 -
autotools的主要内容
是这篇文章的来源。autoconf和automake是啥?这要从类Unix系统的程序编译说起。一般一个真正的工程肯定不只一个文件,而多个文件的编译是件很麻烦的事情(最简单的就是用gcc或者g 后面接着多个文件),再加上要推出跨平台的(一般只是跨不同的类Unix平台),还有啥包依赖啊什么的,很麻烦嗯。于是就有了一个工具叫make,它接收一个名为Makefile的文件作为参数,自动地进行编译,转载 2013-07-16 08:38:33 · 507 阅读 · 0 评论 -
autotools工具使用
学习GNU/LINUX开发的编程人员,上手之后不久就会在编译开源软件的时候碰到configure脚本,过段时间还会知道configure脚本是autoconf生成的;但是真正想用起来autoconf,却是要弄明白config.h,configure.in,Makfile.am等一大堆的文件,这可能要花些功夫。让我们从一个例子开始,争取为大家省点力气。我们用个小程序作例子,计算一个整数的开方,建转载 2013-07-16 08:48:47 · 453 阅读 · 0 评论 -
task_struct 数据结构
在linux 中每一个进程都由task_struct 数据结构来定义. task_struct就是我们通常所说的PCB.她是对进程控制的唯一手段也是最有效的手段. 当我们调用fork() 时, 系统会为我们产生一个task_struct结构。然后从父进程,那里继承一些数据, 并把新的进程插入到进程树中, 以待进行进程管理。因此了解task_struct的结构对于我们理解任务调度(在linux转载 2013-05-28 23:53:11 · 425 阅读 · 0 评论 -
date 命令实现源码分析
hwclock可以设置系统时间,大家可能都用过。但是我想每个人对知道此命令的途径却不完全相同。我陈述一下自己得知此命令的过程,希望能那些对linux望而却步的初学者有些帮助,linux本身公开源码,这对那些追根问底的人是个不错的选择。文中过程废话较多,假设读者是初学者,对一些过程不是很清楚。高手见谅!几天前要做几台服务器的时间同步,和同事讨论系统时间设置的问题,我模糊记得date可转载 2013-05-28 19:26:16 · 1974 阅读 · 0 评论 -
Linux export 命令
功能说明:设置或显示环境变量。(比如我们要用一个命令,但这个命令的执行文件不在当前目录,这样我们每次用的时候必须指定执行文件的目录,麻烦,在代码中先执行export,这个相当于告诉程序,执行某某东西时,需要的文件或什么东东在这些目录里)语 法:export [-fnp][变量名称]=[变量设置值]补充说明:在shell中执行程序时,shell会提供一组环境变量。 export可新增,修改转载 2013-05-27 23:42:37 · 452 阅读 · 0 评论 -
strtok 与 strsep 函数说明
这几天处理字符串,突然遇到字符串分割问题,上网查了一些资料后,找到这两个函数,strtok与strsep函数。网上举的例子千篇一律,下面我根据函数的实现源码,记录一下使用说明,供大家讨论,欢迎大牛拍砖!PS:找个库函数源码的在线查询网站真不容易,先找到了这个http://sources.redhat.com/cgi-bin/cvsweb.cgi/libc/?cvsroot=glibc之后,发现转载 2013-05-27 13:04:44 · 1049 阅读 · 0 评论 -
程序、进程、作业之间的区别与联系
程序与进程之间的区别:(1)进程更能真实地描述并发,而程序不能。(2)进程由程序和数据两部分组成,进程是竞争计算机系统有限资源的基本单位,也是进程处理机调度的基本单位。(3)程序是静态的概念;进程是程序在处理机上一次执行的过程,是动态的概念。(4)进程有生存周期,有诞生有消亡。是短暂的;而程序是相对长久的。(5)一个程序可以作为多个进程的运行程序;一个进程也可以转载 2013-05-11 18:01:00 · 2991 阅读 · 0 评论 -
Linux系统调用--fstat/stat/lstat函数详解
【fstat/stat/lstat系统调用】 功能描述: 获取一些文件相关的信息。 用法: #include #include #include int stat(const char *path, struct stat *buf); int fstat(int filedes, struct stat *buf); in转载 2013-04-19 19:15:01 · 928 阅读 · 0 评论 -
系统调用wait、waitpid和exec函数
本文介绍了Linux下的进程的一些概念,并着重讲解了与Linux进程管理相关的重要系统调用wait,waitpid和exec函数族,辅助一些例程说明了它们的特点和使用方法。1.7 背景在前面的文章中,我们已经了解了父进程和子进程的概念,并已经掌握了系统调用exit的用法,但可能很少有人意识到,在一个进程调用了exit之后,该进程并非马上就消失掉,而是留下一个称为僵尸进程(Zombie)的数转载 2013-04-27 17:08:44 · 803 阅读 · 0 评论 -
wait系统调用解析
一、在介绍wait系统调用之前,先看一下僵尸进程:系统在调用exit()后,进程还没有马上消失掉,还残留一些信息:PID、退出状态。僵尸进程对系统毫无作用!//下面的程序中,由于子进程已经结束,而父进程在休眠中,无法对子进程收集=>出现僵尸进程60秒。#include#include#include#includeint main(){pid_t pid;转载 2013-04-27 15:50:45 · 970 阅读 · 0 评论 -
关于fork()返回值
fork简介: fork英文原意是“分岔,分支”的意思,而在操作系统中,乃是著名的Unix(或类Unix,如Linux,Minix)中用于创建子进程的系统调用。 【NOTE1】 fork () 的作用是什么?换句话说,你用 fork () 的目的是什么? ――是为了产生一个新的进程,地球人都知道 :)产生一个什么样的进程? ――和你本来调用 fork (转载 2012-12-14 20:16:06 · 924 阅读 · 0 评论 -
Linux伙伴系统
http://www.2cto.com/os/201206/134241.html 伙伴系统的概述 Linux内核内存管理的一项重要工作就是如何在频繁申请释放内存的情况下,避免碎片的产生。Linux采用伙伴系统解决外部碎片的问题,采用slab解决内部碎片的问题,在这里我们先讨论外部碎片问题。避免外部碎片的方法有两种:一种是之前介绍过的利用非连续内存的分配;另外一种则是用一种转载 2012-11-24 15:23:45 · 421 阅读 · 0 评论 -
bochs启动报错:Message: ROM: System BIOS must end at 0xfffff
点进入系统后控制台出现下面的提示:Please choose one: [6] 600000000000i[ ] installing win32 module as the Bochs GUI00000000000i[ ] using log file bochsout.txt==================================================原创 2012-11-22 18:06:23 · 1516 阅读 · 2 评论 -
ELF文件加载
一、ELF相关的背景知识1. ELF格式文件相关概念ELF格式文件主要包括以下三种类型的文件:可重定位的目标文件(.o文件)--> 用于链接生成可执行文件或动态链接库文件(.so)可执行文件--> 进程映像文件共享库(.so文件)--> 用于链接从链接和执行的角度来讲,ELF文件存在两种视图:链接视图和执行视图。为了区分两种视图,只需记住链接视图转载 2012-10-27 15:19:31 · 1927 阅读 · 0 评论 -
bochs下如何加载和调试jos内核的过程:
I.Bochs 下编译和运行Jos内核http://pdos.lcs.mit.edu/6.828/2007/labs/lab1/lab1.tar.gz 下载Lab1所需内核tar 解压sudo ln -s /usr/bin/make /usr/bin/gmake 添加make别名gmakegmake 编译Jos内核(Notice:it must be maked with th转载 2012-10-24 16:08:52 · 1888 阅读 · 0 评论 -
Linix 启动过程详解
启动linux kernel过程:PC/AT机内存使用区域图:|-----------------------------------------------------| 0xffffffff(=4GB)| jmp ROM_BIOS_LOCACTION|----------------------------------------------------转载 2012-10-20 20:07:13 · 515 阅读 · 0 评论 -
【摘录】汇编文件后缀 .s 与 .S
转自 http://www.cnblogs.com/IamEasy_Man/archive/2011/08/10/2134212.html 一、大小写后缀的区别.s 汇编语言源程序;汇编.S 汇编语言源程序;预处理,汇编小写的s文件,在后期阶段不在进行预处理操作,所以我们不能在这里面写预处理的语句在里面大写的S文件,还会进行预处理、汇编转载 2012-10-21 20:29:31 · 1202 阅读 · 0 评论 -
ELF二进制文件
1.1.1 整体结构ELF对象格式用于目标文件(.o扩展名)和执行文件. 有些信息只出现在目标文件或执行文件中.ELF文件由下列部件构成. ELF header必须放在文件的开始;其他部件可以随便排放(ELF header给出了其他部件的偏移量).ELF文件构件:Section描述ELF header一般信息.转载 2012-10-19 22:46:23 · 1087 阅读 · 0 评论