Linux系统编程
文章平均质量分 80
chenjin_zhong
工程师
展开
-
redhat Enterprise 5图形界面与开机启动菜单
<br />图形界面越来越受到大家的欢迎,随着Windows的普及,人们已经习惯于图形界面操作。然而,早期的linux却是基于文本(text)操作,这也是linux不能广泛欢迎的原因之一。不过,现在的linux也已经支持图形界面了。可能有的时候大家会遇到这样的一个问题,安装linux时,会提示Start X failed. 这主要是因为你的显卡不支持图形界面,需要安装linux显卡驱动程序。下面以redhat Enterprise 5为例,解决从文本界面到字符界面的转换。<br />(1)下载ati-dri原创 2010-10-10 09:47:00 · 3322 阅读 · 0 评论 -
C语言中的函数指针与指针函数
函数是任何一门语言中必不可少的部分,正是由这些函数组成了程序。首先谈一下C语言中的函数指针与指针函数,再了解一下函数参数传递的相关原理。1.函数指针与指针函数(1) 函数指针 即指向这个函数的指针,定义为 数据类型 (*fun)(参数列表) ,()的优先级比*高,所以*fun加括号。如 void (*fun)(int*,int*);(2)指针函数 即返回值是指针的函数,定义为 数据类型 * fun(参数列表). 如 char* fun(int*,int*);即返回值为char*型。在C语言中,变量有它的地址原创 2010-12-26 00:52:00 · 980 阅读 · 0 评论 -
Linux下cp命令模拟
<br />学过Linux的都知道, cp命令是linux系统中的文件复制命令,它有很多的参数,提供了很强的功能。不仅可以进行文件的复制,而且还能复制整个目录。<br />下面利用文件I/O操作来模拟cp命令的单个文件复制与整个目录的复制功能.<br />用到的函数: 包括文件操作与文件I/O操作<br /> <br />cp命令模拟程序:<br />例如: 复制/etc/inittab到root目录下,可以用 ./cp /etc/inittab /root/<br /> .原创 2010-12-26 20:30:00 · 1779 阅读 · 0 评论 -
Linux下Shell重定向
1. 标准输入,标准输出与标准错误输出Linux下系统打开3个文件,标准输入,标准输出,标准错误输出。标准输入:从键盘输入数据,即从键盘读入数据。标准输出:把数据输出到终端上。标准错误输出:把标准错误输出到终端上。默认的标准输入指的是键盘,默认的标准输出与标准错误输出指的是屏幕或者是终端。系统为这三个文件分配了文件标识符fd(file descripter).在Linux系统下,一切皆是文件,对文件的操作,一般要用到文件标识符。它们的文件标识符,分别为0,1,2.2. 重定向重定向分为输入重定向与输出重定向原创 2010-12-24 11:24:00 · 2599 阅读 · 0 评论 -
Linux C语言操作MySQL
1.MySQL数据库简介MySQL是一个开源码的小型关系数据库管理系统,体积小,速度快,总体成本低,开源。MySQL有以下特性:(1) 使用C和C++编写,并使用了多种编译器进行测试,保证源码的可移植性。(2) 支持多线程,利用CPU资源,支持多用户。(3) 可以处理拥有上千万条记录的大型数据库。(4)既可以作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为 一个库而嵌入到其他软件中去。2. MySQL数据库的安装安装MySQL数据库需要三原创 2011-01-04 12:20:00 · 8401 阅读 · 4 评论 -
Linux C语言操作SQLite数据库
1. SQLite数据库特点(1)SQLite数据库是开源的嵌入式数据库,无需独立的数据库引擎,直接嵌入到应用程序进程中,因此,通过API,应用程序可以直接操作它。(2)事务的处理是原子的,一致的,独立的,可持久化的(ACID),即使在系统崩溃和掉电后。(3)SQLite数据库通过独占性与共享锁来实现事务的独立处理。(4)一个单独的跨平台的磁盘文件就能够存储一个数据库。(5)能支持2TB级的数据。(6)自包含,无外部依赖性。(7)支持NULL,INTEGER,NUMERIC,RE原创 2011-01-06 11:50:00 · 4935 阅读 · 0 评论 -
Linux进程通信-信号
1.进程在介绍信号的概念之前,先简单的介绍一下进程的概念:进程可以理解为一段正在执行的程序,它包括以下三个部分内容:(1)一段正在执行的程序(2)与该段程序相关联的全部数据(数据空间,内存,缓冲区)。(3) 程序计数器(PC).2.信号可以这么理解信号,信号本身不是消息,它表达的内容才是消息。 Linux信号是软件中断所提供的用于异步处理事件的一种机制。事件可以来自系统外部,或者来自程序或者是内核。内核处理信号有以下几种方式:(1)忽略此信号即不采取任何动作。但有两种信号不能忽略,SIGKILL,SIGST原创 2011-01-10 20:42:00 · 1564 阅读 · 0 评论 -
Linux信号透彻分析与理解
本文将从以下几个方面来阐述信号:(1)信号的基本知识(2)信号生命周期与处理过程分析(3) 基本的信号处理函数(4) 保护临界区不被中断(5) 信号的继承与执行(6)实时信号中锁的研究第一部分: 信号的基本知识1.信号本质:信号的本质是软件层次上对中断的一种模拟。它是一种异步通信的处理机制,事实上,进程并不知道信号何时到来。2.信号来源(1)程序错误,如非法访问内存(2)外部信号,如按下了CTRL+C(3)通过kill或sigqueue向另外一个进程发送信号3.信号种类信号分为可靠信号与不可靠信号,可靠信号原创 2011-01-11 17:59:00 · 10621 阅读 · 3 评论 -
Linux进程通信-共享内存
1.共享内存共享内存是指把共享数据放到共享内存区域,任何需要访问共享内存区域数据的进程都在自己的进程地址空间中开辟一个新的内存区域,用来映射共享内存数据的物理页面,所有需要访问共享内存区域的进程都要把该共享区域映射到本进程的地址空间中去,系统用shmget获得或创建一个IPC的共享内存区域,并返回相应的标识符,通过shmat将共享内存区域映射到进程的地址空间中去,每一个共享内存区域都对应shm文件系统上的一个文件,相当于映射shm文件系统上的同名文件到共享内存区域,shmdt是解除对共享内存区的映射,shm原创 2011-01-17 20:55:00 · 3293 阅读 · 0 评论 -
Linux进程通信-消息队列
1.消息队列消息队列也称为报文队列,消息队列是随内核持续的,只有在内核重起或显示删除一个消息队列时,该消息队列才会真正删除系统中记录消息队列的数据结构struct ipc_ids msg_ids位于内核中,系统中所有消息队列都可以在结构msg_ids中找到访问入口消息队列其实就是一个消息的链表,每个消息队列有一个队列头,称为struct msg_queue,这个队列头描述了消息队列的key值,用户ID,组ID等信息,但它存于内核中而结构体struct msqid_ds能够返回或设置消息队列的信息,这个结构体原创 2011-01-17 19:32:00 · 2622 阅读 · 0 评论 -
Grub用法简要
grub是一个多重启动管理器,它可以在多个操作系统中选择引导哪个操作系统。如XP与linux,可以选择引导其中的任何一个系统。当安装好了grub,开机时,会出现grub启动菜单,这时候grub会去读取/boot/menu.lst中的命令进行开机引导。但对于双系统用户有时候会出现问题,如一开机就出现grub,那么这是什么原因以及如何解决呢?这是由于grub无法读取menu.lst,可能是menu.lst被破坏了。此时,如果想进入系统,可以用以下命令:(1)进入XProotnoverify (hd0,0)//表原创 2011-01-20 08:45:00 · 1741 阅读 · 1 评论 -
Linux进程通信-内存映射
<br />1. 内存映射<br />内存映射实际上是把文件映射到一块内存上,在进程中返回映射的地址,以后对该文件的操作就象操作内存一样,加快了文件/设备的访问速度。<br />与内存映射相关的另外一个概念就是共享内存,A,B进程共享内存的意思是将共享内存映射到A,B各自的进程地址空间中去,以后无论进程A或者是进程B对共享内存的读写,都彼此知道。<br />从功能上区分,内存映射是为了加快文件/设备的读写速度,而共享内存是加快多个进程间通信。<br />普通的进程读写文件,需要4次内核copy数据,而内存映原创 2011-01-17 20:26:00 · 2031 阅读 · 0 评论 -
C语言中的常量指针与指针常量
<br />1. 常量指针与指针常量是C语言中两个比较容易混淆的概念:<br />(1) const char* p;<br />(2) char* const p=a;<br />(3) char* p="abc";<br />(1)式定义了一个常量指针,即指向一个常量的指针,指向的内容是常量,不可修改,放在常量区的,但指针本身可以修改,即*p='b',是非法的,*p是p指向的常量的第一个字符,是个常量,不能改变的。p=&q这是可以的,指针可以指向不同的地址。<br />(2)式定义了一个指针常量,即指针原创 2010-12-25 15:17:00 · 4545 阅读 · 2 评论 -
Linux下文件I/O操作详解
<br />1. 文件I/O操作类型<br />文件在Linux系统中是一个广泛的概念,Linux将所有的硬件设备当作文件来处理。文件的I/O分为两种类型,第一种类型是非缓冲式文件操作,主要是由系统调用提供,另一种是缓冲式I/O操作,主要是由C语言的标准输入输出库函数提供。<br />2. 非缓冲式文件I/O操作<br />非缓冲式文件操作对于小规模文件的读写,或者是实时设备,执行非缓冲式文件操作,应用程序能够立即得到数据。非缓冲式文件操作的函数主要是由系统调用提供,有以下几个函数,read(),write原创 2010-12-26 20:12:00 · 3385 阅读 · 0 评论 -
Linux下锐捷拨号上网
<br />想必大家都遇到过linux下锐捷拨号上网的问题。以前试过用锐捷拨号上网,但是都没有成功,不过今天又重新试了一下,竟然成功了。下面把linux下拨号上网的全过程写下来,供大家参考交流。<br />1. 必须配置好静态IP,网关,还有DNS. 我用的是redhat5企业版. 系统->管理->网络 下进行配置.<br />2.安装linux下锐捷拨号软件mentohust,我用的是mentohust-0.3.4-1.el5.i386.rpm,可能会产生缺少libpcap错误,不要着急,安装libpca原创 2010-12-06 00:53:00 · 1469 阅读 · 1 评论 -
Linux下安装mplayer
相信用过linux的人都知道,mplayer是linux下一种比较优秀的视频播放软件,而且安装过程比较简单,因此比较受到大家的欢迎。下面就介绍一下怎么在linux下安装mplayer.1.下载mplayer所需要的软件 主程序: MPlayer-1.0rc2.tar.bz2 解码器: essential-20071007.tar.bz2和windows-essential-20071007.zip 皮肤: Orange-1.3.tar.bz22.安装解码器(1)mkdir /usr/lib/codecs(2原创 2010-12-07 00:00:00 · 523 阅读 · 0 评论 -
Linux向内核添加模块
Linux内核编译的基础是向内核添加自己的模块。下面就以hellomod为例,简单的介绍一下向内核添加模块。(1)编写 hellomod.c#include //所有的模块都要使用头文件module.h#include //头文件kernel.h包含了常用的内核函数#include //包含了宏_init和_exit,它们允许释放和占用内存。MODULE_LICENSE("GPL"); //GNU公共许可证。static int __init lkp_init(void){printk("hello fr原创 2010-12-11 17:26:00 · 1158 阅读 · 0 评论 -
Linux内核编译详解
最近研究Linux内核源码,真是难搞。但最基本的要从Linux内核编译说起,下面谈谈在Redhat el5下面成功编译内核的一些必得:(1)下载内核源码,我用的内核源码是linux-2.6.20.tar.gz。(2)把下载的内核源码放到/usr/src/kernels目录下。(3)进入该目录make mrproper 功能是清除残留的.o文件,由于多次编译可能残留许多.o文件。(4) make menuconfig 生成.config文件,以及进行相应的配置。其中配置界面有带[*]的选项和带[M]的选项,带原创 2010-12-11 17:04:00 · 438 阅读 · 0 评论 -
Linux下文件权限
1. 所谓文件权限,是指对文件的访问权限,包括对文件的读,写和执行的权限。而文件的权限分为三类,所属用户对文件的权限,用户所属的组对文件的权限,以及其它用户和其它组对文件的权限。在Linux下,用ls -al显示文件或目录的权限信息。 其中 -a是显示所有的文件,包括 . 和 .. 目录。 -l 是显示此目录或文件的详细信息。ls -al 文件名 --显示文件的详细信息ls -a 目录名 --显示此目录下所有的文件,包含隐藏目录.和上一级目录..ls -l 目录名 --显示此目录下所有文件的详细信息,不包含原创 2010-12-20 10:04:00 · 839 阅读 · 0 评论 -
C语言中数组与指针的透彻分析
一. 一维数组与指针的关系分析1.指针与一维数组的定义指针定义: 指针是包含内存地址的变量,一般的指针变量直接包含特定的值,指针变量包含的是某一特定数据类型的内存地址。 一维数组的定义: 数组是一组连续的内存位置,它们都具有相同的名称和类型。数组名表示数组的首地址。定义上的区别: 指针是个变量,可以进行加或减运算,可以改变其指向的内存地址值,而数组是个常量,其内存地址的值不可改变。可见,指针变量里面存放的是地址,数组名表示数组的首地址。因此,既然都有地址,那么它们之间就有着密切的联系。2. 指针与数组的输出原创 2010-12-17 10:12:00 · 4605 阅读 · 3 评论 -
Linux下文件操作
<br />1. Linux下文件操作的途径<br />(1)通过底层文件系统来实现,要求熟悉底层文件系统的结构,并且编写大量代码来完成<br />(2)通过调用Shell来完成,访问Shell接口,但Shell返回的信息不便于程序的分析<br />(3)通过系统调用来实现,能够完成相应的功能,并且返回足够的信息<br />2. Linux下文件操作的方式<br />(1)创建文件或目录<br />mkdir(const char* dir_path,umask);//传入的参数为路径和掩码,创建一个目录,原创 2010-12-20 10:42:00 · 561 阅读 · 0 评论 -
Linux下ls和rm命令的模拟
<br />1. ls和rm命令<br />ls命令是显示目录下的文件或目录,不显示深层子目录<br />rm命令是删除命令,rm -rf 目录名 才能删除此目录下的所有子目录和文件<br />2. ls命令的模拟<br />/*<br />用于模拟ls的功能<br />*/<br />#include <stdio.h><br />#include <sys/stat.h><br />#include <sys/types.h><br />#include <stdlib.h><br />#include原创 2010-12-20 10:48:00 · 730 阅读 · 0 评论 -
C语言中的strlen与sizeof的区别
sizeof与strlen是有着本质的区别,sizeof是求数据类型所占的空间大小,而strlen是求字符串的长度,字符串以/0结尾。区别如下:(1) sizeof是一个C语言中的一个单目运算符,而strlen是一个函数,用来计算字符串的长度。(2)sizeof求的是数据类型所占空间的大小,而strlen是求字符串的长度实例1:printf("char=%d/n",sizeof(char)); //1printf("char*=%d/n",sizeof(char*)); //4printf("int=%d原创 2010-12-25 16:05:00 · 6090 阅读 · 0 评论 -
Linux下的exec系统调用详解
<br />1. 系统调用exec是以新的进程去代替原来的进程,但进程的PID保持不变。因此,可以这样认为,exec系统调用并没有创建新的进程,只是替换了原来进程上下文的内容。原进程的代码段,数据段,堆栈段被新的进程所代替。<br />一个进程主要包括以下几个方面的内容:<br />(1)一个可以执行的程序<br />(2) 与进程相关联的全部数据(包括变量,内存,缓冲区)<br />(3)程序上下文(程序计数器PC,保存程序执行的位置)<br /> <br />exec是一个函数簇,由6个函数组成,分别是原创 2010-12-26 16:29:00 · 4532 阅读 · 0 评论 -
Linux下fork函数详解
1. 进程的概念进程可以理解为程序的一次执行过程。每一个特定的时候只有一个进程占用CPU。当一个进程的时间片用完后,系统把相关的寄存器的值保存到该进程表相应的表项里。同时把代替该进程即将执行的进程的上下文从进程表中读出,并更新相应的寄存器值,这个过程称为上下文交换。上下文交换其实就是读出新的进程的PC(程序计数器),指示当前进程的下一条将要执行的指令。一个进程主要包含以下三个元素:(1)一个正在执行的程序(2)与该进程相关联的全部数据(变量,内存,缓冲区)(3)程序上下文(程序计数器)2. pid=fork原创 2010-12-26 17:31:00 · 1772 阅读 · 3 评论 -
Linux进程通信-信号量
1.信号量:信号量是解决资源同步与互斥的通用方法。信号量的值可以代表可用资源数。可以利用信号量来解决共享内存的资源同步与互斥问题。内核通过全局数据结构struct ipc_ids sem_ids找到struct sem_array的第一个成员struct kern_ipc_perm,而这个结构体中有一个key,对应于具体的信号量集,这样,内核就知道系统中所有的信号量集合了。每一个信号量集合都有一个sem_array,用来描述信号量集合的相关信息,这个结构体存在于内核空间中,对应于用户空间的联合体union原创 2011-01-17 21:20:00 · 1142 阅读 · 0 评论