——————
#include
#include
#include
int pid1, pid2; // 定义两个进程变量
main( ) {
int fd[2];
char OutPipe[100], InPipe[100]; // 定义两个字符数组
pipe(fd); // 创建管道
阅读全文
2007-08-18
2007-08-18
——————
管道及有名管道
在本系列序中作者概述了 linux 进程间通信的几种主要手段。其中管道和有名管道是最早的进程间通信机制之一,管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。 认清管道和有名管道的读写规则是在程序中应用它们的关键,本文在详细讨论了管道和有名管道的通信机制的基础上,用实例对其读写规则进行了程序验证,这样做有利于增强读者对读写规则的感性认识,同时也提供了应用范例。
1、 管道概述及相关API应用
1.1 管道相关的关键概念
管道是Linux支持的最初Unix IPC形式之一,具有以下特点:
管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道;
只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程);
单独构成一种独立的文件系统:管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在与内存中。
阅读全文
2007-08-18
——————
对于C语言,有人认为它已经落伍了.对于这个问题,仁者见仕,智者见智.的确,C++比C有更强大的诸多优势.但C++是建立在C之上的.这也是Herbert Schildt所著的>在全世界畅销不衰的原因.更何况,要深入学习LINUX就必需要有相当的C功底.(这也是我搜集整理本文的根由:-)
现结合个人在编程中的体会,为使新手少走弯路,为老手锦上添花,因此无论你是使用C或C++编程,也无论你是程序设计的初学者还是成熟的专业人员,均会发现,本文将会对你有所收益.当然,我尽力写得清晰易懂,又不古板.
=======================================
|版权声明:你可以自由复制与分发本文档 |
|如果你要修改本文档或提出更好建议,请 |
|先通知文章的作者。而不要仅在公告栏中 |
|贴出。因为作者可能漏看。无论如何,都 |
|须保留本声明。 |
阅读全文
2007-08-18
——————
作者:秋水 本文选自:开放系统世界--赛迪网 2002年10月10日
关于Windows启动过程介绍的文章可谓多如牛毛,而对于Linux的介绍却是凤毛麟角。凡是曾经使用过Linux的用户可能都会注意到,当计算机启动时,屏幕上会出现很多信息。一般情况下,这些信息我们可以通过以下的命令看到:
cat /var/log/dmesg | more
这些信息究竟有什么含义?这个问题看起来似乎很容易回答,因为只要在Linux参考书里查找一下,就会找出一个类似于这样的答案:“这是一些内核启动信息……”。但是“内核启动信息”到底是什么意思呢?
要想对Linux内部工作有所了解,就必须要对Linux内核的体系结构有一个全面的了解。下面我们就去揭开它的秘密。在此,我不想解释Linux内核的体系结构,只想解释(或者说是试图去解释)计算机系统启动进程中一些最基本的概念。这里所说的启动过程是指从按下开关到提示符出现的整个过程。
启动指的是什么
在操作系统的词汇里,启动是指通过处理器执行一些指令,把操作系统的一部分放入到主存中。在启动过程中,Linux内部的数据结构会被初始化,会被赋给一些初始值,并且某些进程会被创建。因为当计算机电源打开时,所有的硬件设备都处于一种不可预知的状态,内存也处于一种不活动的随机状态,所以,计算机的启动过程可以说是一个长且复杂的任务。因此,我们必须知道,之所以叫“启动”主要是因为计算机体系结构的原因。
在此提请读者注意:
阅读全文
2007-08-17
——————
本讲主要概述Linux设备驱动框架、驱动程序的配置文件及常用的加载驱动程序的方法;并且介绍Red Hat Linux安装程序是如何加载驱动的,通过了解这个过程, 我们可以自己将驱动程序放到引导盘中;安装完系统后,使用kudzu自动配置硬件程序。
Linux设备驱动概述
1. 内核和驱动模块
操作系统是通过各种驱动程序来驾驭硬件设备,它为用户屏蔽了各种各样的设备,驱动硬件是操作系统最基本的功能,并且提供统一的操作方式。正如我们查看屏幕上的文档时,不用去管到底使用nVIDIA芯片,还是ATI芯片的显示卡,只需知道输入命令后,需要的文字就显示在屏幕上。硬件驱动程序是操作系统最基本的组成部分,在Linux内核源程序中也占有较高的比例。
Linux内核中采用可加载的模块化设计(LKMs ,Loadable Kernel Modules),一般情况下编译的Linux内核是支持可插入式模块的,也就是将最基本的核心代码编译在内核中,其它的代码可以选择是在内核中,或者编译为内核的模块文件。
如果需要某种功能,比如需要访问一个NTFS分区,就加载相应的NTFS模块。这种设计可以使内核文件不至于太大,但是又可以支持很多的功能,必要时动态地加载。这是一种跟微内核设计不太一样,但却是切实可行的内核设计方案。
我们常见的驱动程序就是作为内核模块动态加载的,比如声卡驱动和网卡驱动等,而Linux最基础的驱动,如CPU、PCI总线、TCP/IP协议、APM(高级电源管理)、VFS等驱动程序则编译在内核文件中。有时也把内核模块就叫做驱动程序,只不过驱动的内容不一定是硬件罢了,比如ext3文件系统的驱动。
理解这一点很重要。因此,加载驱动时就是加载内核模块。下面来看一下有关模块的命令,在加载驱动程序要用到它们:lsmod、modprob、insmod、rmmod、modinfo。
阅读全文
2007-08-17
——————
代码:——————————————————————————–1.建立和运行shell程序
什么是shell程序呢? 简单的说shell程序就是一个包含若干行
shell或者linux命令的文件.
象编写高级语言的程序一样,编写一个shell程序需要一个文本编辑器.如VI等.
在文本编辑环境下,依据shell的语法规则,输入一些shell/linux命令行,形成一个完整
的程序文件.
执行shell程序文件有三种方法
(1)#chmod +x file
阅读全文
2007-08-17
——————
编写Makefile文件 来源: 作者:articleman 发布时间:2007-05-07
编写Makefile文件
引自:http://blog.chinaunix.net/u/21948/showart_292182.html
1、make是通过比较对应文件(规则的目标和依赖)的最后修改时间,来决定哪些文件需要更新、那些文件不需要更新。对需要更新的文件, make就执行数据库中所记录的相应命令(在make读取Makefile后会建立一个编译过程的描述数据库。此数据库中记录了所有各个文件之间的相互关系,以及它们的关系描述)来重建它,对于不需要重建的文件make什么也不做。
2、在书写时,一个较长行可以使用反斜线(\)分解为多行,这样做可以使Makefile清晰、容易阅读。注意:反斜线之后不能有空格!
3、在实际工作中大家比较认同的方法是,使用一个变量“objects”、“OBJECTS”、“objs”、“OBJS”来作为所有的.o文件的列表的替代。在使用到这些文件列表的地方,使用此变量来代替。比如说定义了变量“OBJS”,那么就可以在需要的地方使用“$(OBJS)” 来表示它。
4、自动推导规则:make能够自动完成对.c文件的编译并生成对应的.o文件。这是make的隐含规则。
阅读全文
2007-08-17
——————
级别: 初级
曹 羽中 (mailto:caoyuz@cn.ibm.com?subject=Shell脚本调试技术), 软件工程师, IBM中国开发中心
2007 年 7 月 26 日
本文全面系统地介绍了shell脚本调试技术,包括使用echo, tee, trap等命令输出关键信息,跟踪变量的值,在脚本中植入调试钩子,使用“-n”选项进行shell脚本的语法检查, 使用“-x”选项实现shell脚本逐条语句的跟踪,巧妙地利用shell的内置变量增强“-x”选项的输出信息等。 一. 前言
shell编程在unix/linux世界中使用得非常广泛,熟练掌握shell编程也是成为一名优秀的unix/linux开发者和系统管理员的必经之路。脚本调试的主要工作就是发现引发脚本错误的原因以及在脚本源代码中定位发生错误的行,常用的手段包括分析输出的错误信息,通过在脚本中加入调试语句,输出调试信息来辅助诊断错误,利用调试工具等。但与其它高级语言相比,shell解释器缺乏相应的调试机制和调试工具的支持,其输出的错误信息又往往很不明确,初学者在调试脚本时,除了知道用echo语句输出一些信息外,别无它法,而仅仅依赖于大量的加入echo语句来诊断错误,确实令人不胜其繁,故常见初学者抱怨shell脚本太难调试了。本文将系统地介绍一些重要的shell脚本调试技术,希望能对shell的初学者有所裨益。
本文的目标读者是unix/linux环境下的开发人员,测试人员和系统管理员,要求读者具有基本的shell编程知识。本文所使用范例在Bash3.1+Redhat Enterprise Server 4.0下测试通过,但所述调试技巧应也同样适用于其它shell。
二. 在shell脚本中输出调试信息
通过在程序中加入调试语句把一些关键地方或出错的地方的相关信息显示出来是最常见的调试手段。Shell程序员通常使用echo(ksh程序员常使用print)语句输出信息,但仅仅依赖echo语句的输出跟踪信息很麻烦,调试阶段在脚本中加入的大量的echo语句在产品交付时还得再费力一一删除。针对这个问题,本节主要介绍一些如何方便有效的输出调试信息的方法。
阅读全文