博客首页
注册
建议与交流
排行榜
加入友情链接
推荐
投诉
搜索:
帮助
再NB的肖邦,也弹不出我心中的忧伤......
It's better to burn out than to fade away!!!
tequliaSusan.cublog.cn
管理博客
发表文章
留言
收藏夹
博客圈
音乐
相册
文章
· C/C++学习
· 硬件电路
· uboot移植
· UNIX系统编程
· VIM使用与学习
· Linux网络编程
· Linux内核编程
· Linux设备驱动
· 嵌入式学习
· 杂乱心情
· Linux应用
首页
关于作者
姓名:Tequlia Lv 职业:学生 年龄:26 位置: 个性介绍:再NB的肖邦,也弹不出我心中的忧伤......
||
<<
>>
||
我的分类
文章列表 - Linux内核编程
Linux2.6内核开机启动logo
2.6内核启动Logo<br> 在配置内核的时候选中了启动Logo的支持。 <br> 使用下面的方法可以将企鹅的Logo换成自己喜欢的任意图片。 <br> 首先准备一幅自己喜欢的图片,然后将该图片保存成png格式,例如linuxlogo.png。在Linux下使用下面的命令: <br> # pngtopnm linuxlogo.png > linuxlogo.pnm <br> # pnmquant 224 linuxlogo.pnm > linuxlogo224.pnm <br> # pnmtoplainpnm linuxlogo224.pnm > linuxlogo224.ppm <br> mv linuxlogo224.ppm logo_linux_clut224.ppm<br> 然后将logo_linux_clut224.ppm替换$WORKSPACE/linux-2.6.8.1/drivers/video/logo文件夹中的logo_linux_clut224.ppm<br> (最好先做好备份),重新编译内核,启动之后就可以在屏幕左上方看到自己的Logo了。
查看全文
发表于:2008-07-28 ┆
阅读(70)
┆
评论(0)
linux中diff和patch使用操作(二) ---转载
<p style="text-indent: 2em;">二、为多个文件进行补丁操作 </p><p style="text-indent: 2em;"> </p><p style="text-indent: 2em;">1、创建测试文件夹 </p><p style="text-indent: 2em;"> </p><p style="text-indent: 2em;">[armlinux@lqm patch]$ mkdir prj0 </p><p style="text-indent: 2em;"> </p><p style="text-indent: 2em;">[armlinux@lqm patch]$ cp test0 prj0 </p><p style="text-indent: 2em;"> </p><p style="text-indent: 2em;">[armlinux@lqm patch]$ ls </p><p style="text-indent: 2em;"> </p><p style="text-indent: 2em;">prj0 test0 test1 test1.patch </p><p style="text-indent: 2em;"> </p><p style="text-indent: 2em;">[armlinux@lqm patch]$ cd prj0/ </p><p style="text-indent: 2em;"> </p><p style="text-indent: 2em;">[armlinux@lqm prj0]$ ls </p><p style="text-indent: 2em;"> </p><p style="text-indent: 2em;">test0 </p><p style="text-indent: 2em;"> </p><p style="text-indent: 2em;">[armlinux@lqm prj0]$ cat >>prj0name<<eof></eof></p><p style="text-indent: 2em;"> </p><p style="text-indent: ……
查看全文
发表于:2008-07-02 ┆
阅读(105)
┆
评论(0)
linux中diff和patch使用操作(一) ---转载
<p style="text-indent: 2em;">因为在u-boot移植过程中,有几处通用文件要修改,如果每次都要手动修改就太麻烦了。制作补丁可以解决这个问题。 </p><p style="text-indent: 2em;"> </p><p style="text-indent: 2em;">学习资料的收集比较简单,方法一类似于这种初级问题网上资料非常丰富,google 或者baidu搜索一下,然后选择有价值的资料,方法二是阅读man在线文档。完成收集工作,当然最终要在自己的Linux上作实验,比较总结,消化吸收 为自己的东西。要除去这么一种错误思想:一定要学全。要知道,一次学全是不可能的,只能先学习最为常用的,在以后不断实践的过程中逐步的丰富,最终达到比 较高的水平。把握的原则是:日有所学,学以致用,用以促学。 </p><p style="text-indent: 2em;"> </p><p style="text-indent: 2em;">首先介绍一下diff和patch。在这里不会把man在线文档上所有的选项都介绍一下,那样也没有必要。在99%的时间里,我们只会用到几个选项。所以必须学会这几个选项。 </p><p style="text-indent: 2em;"> </p><p style="text-indent: 2em;">1、diff </p><p style="text-indent: 2em;"> </p><p style="text-indent: 2em;">NAME </p><p style="……
查看全文
发表于:2008-07-02 ┆
阅读(108)
┆
评论(0)
(转载Linux内核中的等待队列)
<p>相信很多写程序的人都写过 socket 的程序。当我们 open 一个 socket 之后,接着去读取这个 socket,如果此时没有任何资料可供读取,那 read 就会 block 住。(这是没有加上 O_NONBLOCK 的情形),直到有资料可读取才会传回来。在 Linux kernel 里有一个数据结构可以帮助我们做到这样的功能。这个数据结构就是这里要跟各位介绍的 wait queue。在 kernel 里,wait_queue 的应用很广,举凡 device driver semaphore 等方面都会使用到 wait_queue 来 implement。所以,它算是 kernel 里蛮基本的一个<a class="channel_keylink" href="http://www.bc-cn.net/Article/kfyy/sjjg/Index.html">数据结构</a>。 <br><br>接下来,我要跟各位介绍一下 wait_queue 的用法,以及用一个例子来说明如何使用 wait_queue。最后,我会带各位去 trace 一下 wait_queue 的原始程序代码,看看 wait_queue 是如何做到的。 <br><br>我 想有件事要先提及的是 Linux 在 user space 跟在 kernel space 上的差异。我们知道 Linux 是 multi-tasking 的环境,同时可以有很多人执行很多的程序。这是从 user 的观点来看的。如果就 kernel 的观点来看,是没有所谓的 multi-tasking 的。在 kernel 里,只……
查看全文
发表于:2008-06-18 ┆
阅读(79)
┆
评论(0)
转贴Oops分析
来自Linus Torvalds的讨论:<br>[url]https://groups.google.com/group/linux.kernel/browse_thread/thread/b70bffe9015a8c41/ed9c0a0cfcd31111[/url]<br>又,[url]http://kerneltrap.org/Linux/Further_Oops_Insights[/url]<br>)<br> <br> 例如这样的一个Oops:<br> Oops: 0000 [#1] PREEMPT SMP <br> Modules linked in: capidrv kernelcapi isdn slhc ipv6 loop dm_multipath snd_ens1371 gameport snd_rawmidi snd_ac97_codec ac97_bus snd_seq_dummy snd_seq_oss snd_seq_midi_event snd_seq snd_seq_device snd_pcm_oss snd_mixer_oss snd_pcm snd_timer snd parport_pc floppy parport pcnet32 soundcore mii pcspkr snd_page_alloc ac i2c_piix4 i2c_core button power_supply sr_mod sg cdrom ata_piix libata dm_snapshot dm_zero dm_mirror dm_mod BusLogic sd_mod scsi_mod ext3 jbd mbcache uhci_hcd ohci_hcd ehci_hcd<br><br> &n……
查看全文
发表于:2008-06-09 ┆
阅读(81)
┆
评论(0)
今天学习了一下内核中的并发和互斥
Linux内核中解决并发的问题最常用的是自旋锁和信号量。他们之间的功能上都是相似的,但是实现的机制十分的不同。<p> 自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环查看是否该自旋锁的保持者已经释放了锁,"自旋"就是"在原地打转"。而信号量则引起调用者睡眠,它把进程从运行队列上拖出去,除非获得锁。<br> 但是,无论是信号量,还是自旋锁,在任何时刻,最多只能有一个保持者,即在任何时刻最多只能有一个执行单元获得锁。这就是它们的"类似"。<br> 鉴 于自旋锁与信号量的上述特点,一般而言,自旋锁适合于保持时间非常短的情况,它可以在任何上下文使用;信号量适合于保持时间较长的情况,会只能在进程上下 文使用。如果被保护的共享资源只在进程上下文访问,则可以以信号量来保护该共享资源,如果对共享资源的访问时间非常短,自旋锁也是好的选择。<span style="color: rgb(255, 1, 2);">但是,如果被 保护的共享资源需要在中断上下文访问(包括底半部即中断处理句柄和顶半部即软中断),就必须使用自旋锁。</span></p><p>与信号量相关的API主要有:<br>定义信号量<br>struct ……
查看全文
发表于:2008-06-03 ┆
阅读(79)
┆
评论(0)
Kconfig学习(转载)
介绍<br> ----<br> <br> 在配置数据库的配置选项是以树的形式组织的:<br> <br> +- Code maturity level options<br> | +- Prompt for development and/or incomplete code/drivers<br> +- General setup<br> | +- Networking support<br> | +- System V IPC<br> | +- BSD Process Accounting<br> | +- Sysctl support<br> +- Loadable module support<br> | +- Enable loadable module support<br> | +- Set version information on all module symbols<br> | +- Kernel module loader<br> +- ...<br> <br> 每个选项都有其自己的依赖关系。这些依赖关系决定了选项是否是可见的。父选项可见,子选项才能可见。<br> <br> 菜单选项<br> --------<br> <br> 大多数的选项都定义了一个配置选项,其它选项则有助于对它们进……
查看全文
发表于:2008-06-02 ┆
阅读(139)
┆
评论(0)
Linux时间,延迟以及延缓操作
<DIV>1、在内核中计时的头函数是#include <linux/param.h></DIV> <DIV>2、Hz符号指出每秒钟产生的时钟滴答数,也就是1秒钟产生的时间中断。</DIV> <DIV>3、#include <linux/jiffies.h></DIV> <DIV> volatile unsigned long jiffies 用这个变量来度量时间的变化。</DIV> <DIV>4、int time_after(unsigned long a, unsigned long b)</DIV> <DIV> int time_before(unsigned long a, unsigned long b)</DIV> <DIV> 这些布尔表达式以安全的方式比较jiffies的数值,无需考虑计时器溢出的问题。</DIV> <DIV>5、jiffies表示的时间和其他表示方法之间的数值转换:</DIV> <DIV> unsigned long timespec_to_jiffies(struct timespec *value);</DIV> <DIV> void jiffies_to_timespec(unsigned long jiffies, struct timespec *value);</DIV> <DIV> unsigned long timeval_to_jiffies(struct timeval *value);</DIV> <DIV> void jiffies_to_timeval(unsigned long jiffies, struct timeval *value);</DIV> <DIV> (每次总是记不住,这次写到blog上以备后患……
查看全文
发表于:2008-06-01 ┆
阅读(76)
┆
评论(0)
Linux多线程编程中条件变量的使用
在网上看到这个系列的http://www.ibm.com/developerworks/cn/linux/thread/posix_thread2/index.html文章对Linux下的POSIX线程编程方法阐述的十分的清晰,小弟目前关心要学习线程同步中的条件变量的使用方法,转载一下呵呵...... <br><p> 互斥对象是线程程序必需的工具,但它们并非万能的。例如,如果线程正在等待共享数据内某个条件出现,那会发生什么呢?代码可以反复对互斥对象锁定和解锁, 以检查值的任何变化。同时,还要快速将互斥对象解锁,以便其它线程能够进行任何必需的更改。这是一种非常可怕的方法,因为线程需要在合理的时间范围内频繁 地循环检测变化。</p> <p> 在每次检查之间,可以让调用线程短暂地进入睡眠,比如睡眠三秒钟,但是因此线程代码就无法最快作出响应。真正需要的是这样一种方法,当线程在等待满足某些 条件时使线程进入睡眠状态。一旦条件满足,还需要一种方法以唤醒因等待满足特定条件而睡眠的线程。如果能够做到这一点,线程代码将是非常高效的,并且不会 占用宝贵的互……
查看全文
发表于:2008-05-06 ┆
阅读(111)
┆
评论(0)
2.6.24内核编译 initrd-2.6.24.img分析(转自linuxdaily)
<DIV> <P style="TEXT-INDENT: 2em">initrd 的英文含义是 boot loader initialized RAM disk,就是由 boot loader 初始化的内存盘。在 linux内核启动前, bootloader 会将存储介质中的 initrd 文件加载到内存,内核启动时会在访问真正的根文件系统前先访问该内存中的 initrd 文件系统。第一阶段启动的目的是为第二阶段的启动扫清一切障爱,最主要的是加载根文件系统存储介质的驱动模块。我们知道根文件系统可以存储在包括IDE、SCSI、USB在内的多种介质上,如果将这些设备的驱动都编译进内核,可以想象内核会多么庞大、臃肿。 <P style="TEXT-INDENT: 2em"> <P style="TEXT-INDENT: 2em">initrd.img是Linux启动过程中很重要的一个文件,如果没指定initrd.img或者指定的initrd.img中并没有包含正确的驱动模块,则系统启动时会挂起,并报告"kernel panic: VFS: Unable to mount root fs on 08:06"的错误。) <P style="TEXT-INDENT: 2em"> <P style="TEXT-INDENT: 2em">它把kernel的启动分成两个阶段:在kernel中保留最少最基本的启动代码,然后把对各种各样硬件设备的支持以模块的方式放在initrd中,这样就在启动过程中可以从initrd所mount的根文件系统中装载需要的模块。……
查看全文
发表于:2008-03-25 ┆
阅读(111)
┆
评论(0)
(转载)Linux内核同步方式
<DIV> <P>同步通常是为了达到多线程协同的目的而设计的一种机制,通常包含异步信号机制和互斥机制作为其实现的底层。在Linux 2.4内核中也有相应的技术实现,包括信号量、自旋锁、原子操作和等待队列,其中原子操作和等待队列又是实现信号量的底层。</P> <P><A name=1><SPAN class=atitle>等待队列和异步信号</SPAN></A></P> <P> <P>wait queue很早就作为一个基本的功能单位出现在Linux内核里了,它以队列为基础数据结构,与进程调度机制紧密结合,能够用于实现核心的异步事件通知机制。我们从它的使用范例着手,看看等待队列是如何实现异步信号功能的。</P> <P>在核心运行过程中,经常会因为某些条件不满足而需要挂起当前线程,直至条件满足了才继续执行。在2.4内核中提供了一组新接口来实现这样的功能,下面的代码节选自kernel/printk.c:</P> <TABLE cellSpacing=0 cellPadding=0 width=580 border=0> <TBODY> <TR> <TD class=code-outline><PRE class=displaycode> unsigned long log_size; 1: DECLARE_WAIT_QUEUE_HEAD(log_wait);... 4: spinlock_t console_lock = SPIN_LOCK_UNLOCKED;... int do_syslog(int type,char *buf,int len){ ...……
查看全文
发表于:2008-03-11 ┆
阅读(183)
┆
评论(0)
转载Oops
1. Oops是什么?<br> <br> 看LKD对oops的描述,oops就应该是unix系统的system panic,叫法不同而已。<br> <br> 什么是panic呢?简单的说就是内核程序错误引发的一种debug和保护机制,系统会dump出内核映像,里面包含了当时CPU的状态,进程的状态,内核堆,栈的状态...最直观的最重要的恐怕就是 调用栈的back trace.<br> <br> 很多情况下,一个oops是可以被重现的,根据调用栈的back trace和printk也许就搞定了问题。<br> 但更多的时候,一个oops是很难重现,比如一个race condition.<br> 这时候,分析一个oops之后的crash dump文件就变得尤为重要了。<br> <br> 2. 如何分析oops.<br> <br> 分析panic的思路和分析应用程序coredump的思路一样的。<br> <br> 首先,要看调用的backtrace和错误消息.<br> <br> 看程序是在哪个函数产生发生了错误,看消息里面有什么有价值的信息,比如空指针引用之类的。<br> <br> <br> 其次,了解了backtrace在什么位置,就可以结合源代码来看是否有问题了。<br> <br> 幸运的话,光看具体函数的代码也许就会发现问题。<br> <br> 但多数时候,还需要检查crash dump的映像文件的。<br> <br> 这时候,一个好用的帮助分析crash……
查看全文
发表于:2008-01-11 ┆
阅读(299)
┆
评论(0)
Oops分析
<img alt="" src="http://www.ibm.com/i/c.gif" height="1" width="10"><table class="no-print" align="right" border="0" cellpadding="0" cellspacing="0" width="160"><tbody><tr><td width="10"><img alt="" src="http://www.ibm.com/i/c.gif" height="1" width="10"></td><td><table border="0" cellpadding="0" cellspacing="0" width="150"><tbody><tr><td class="v14-header-1-small">文档选项</td></tr></tbody></table><table class="v14-gray-table-border" border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="no-padding" width="150"><img alt="" src="http://www.ibm.com/i/c.gif" height="1" width="8"><noscript><tr valign="top"><td width="8"><img alt="" height="1" width="8" src="//www.ibm.com/i/c.gif"/></td><td width="16"><img alt="" width="16" height="16" src="//www.ibm.com/i/c.gif"/></td><td class="small" width="122"><p><span class="ast">未显示需要 JavaScript 的文档选项</span></p></td></tr></noscript><table border="0" cellpadding="0" cellspacing="0" width="143"><form action="https://www.ibm.com/……
查看全文
发表于:2008-01-11 ┆
阅读(339)
┆
评论(0)
Linux系统中常用的错误码
<span id="ctl00_ContentPlaceHolder1_ArticleContent"><p><font face="Verdana, Arial, Helvetica, sans-serif">在 Unix 系统中,使用 <tt>perror</tt> 程序来显示操作系统错误编码的含义,它包含在 MySQL 的分发中。</font></p> <p><font face="Verdana, Arial, Helvetica, sans-serif">下面的列表显示常见的 Linux 系统错误代码。</font> </p><ul><li><font face="Verdana, Arial, Helvetica, sans-serif">1 EPERM<br> Operation not permitted<br> 操作不许可</font> </li><li><font face="Verdana, Arial, Helvetica, sans-serif">2 ENOENT<br> No such file or directory<br> 无此文件或目录</font> </li><li><font face="Verdana, Arial, Helvetica, sans-serif">3 ESRCH<br> No such process<br> 无此过程</font> </li><li><font face="Verdana, Arial, Helvetica, sans-serif">4 EINTR <br> Interrupted system call<br> 系统调用被禁止</font> </li><li><font face="Verdana, Arial, Helvetica, sans-serif">5 EIO <br> I/O error<br> I/O 错误</font> </li><li><font face="Verdana……
查看全文
发表于:2007-12-29 ┆
阅读(491)
┆
评论(0)
ubuntu系统目录结构
<div class="cnt"><h2><font color="#000000">Ubuntu系统目录结构</font></h2> <blockquote> <p>以下为Ubuntu目录的主要目录结构,您稍微了解它们都包含了哪些文件就可以了,不需要记忆。</p> <pre class="literal-block">/ 根目录<br>│<br>├boot/ 启动文件。所有与系统启动有关的文件都保存在这里<br>│ └grub/ Grub引导器相关的文件<br>│<br>├dev/ 设备文件<br>├proc/ 内核与进程镜像<br>│<br>├mnt/ 临时挂载<br>├media/ 挂载媒体设备<br>│<br>├root/ root用户的$HOME目录<br>├home/<br>│ ├user/ 普通用户的$HOME目录<br>│ └.../<br>│<br>├bin/ 系统程序<br>├sbin/ 管理员系统程序<br>├lib/ 系统程序库文件<br>├etc/ 系统程序和大部分应用程序的全局配置文件<br>│ ├init.d/ SystemV风格的启动脚本<br>│ ├rcX.d/ 启动脚本的链接,定义运行级别<br>│ ├network/ 网络配置文件<br>│ ├X11/ 图形界面配置文件<br>│<br>├usr/<br>│……
查看全文
发表于:2007-12-06 ┆
阅读(134)
┆
评论(0)
ubuntu启动时各项功能配置
<p>Linux系统主要通过以下步骤启动:</p> <p>1、读取MBR的信息,启动Boot Manager</p> <p>Windows使用NTLDR作为Boot Manager,如果您的系统中安装多个版本的Windows,您就需要在NTLDR中选择您要进入的系统。</p> <p>Linux通常使用功能强大,配置灵活的GRUB作为Boot Manager,我们将在启动管理章节中向您介绍它的使用方式。<br><span id="more-83"></span><br>2、加载系统内核,启动init进程</p> <p>init进程是Linux的根进程,所有的系统进程都是它的子进程。</p> <p>3、init进程读取“/etc/inittab”文件中的信息,并进入预设的运行级别,按顺序运行该运行级别对应文件夹下的脚本。脚本通常以“start”参数启动,并指向一个系统中的程序。</p> <p>通常情况下,“/etc/rcS.d/”目录下的启动脚本首先被执行,然后是“/etc/rcN.d/”目录。例如您设定的运行级别为3,那么它对应的启动目录为“/etc/rc3.d/”。</p> <p>4、根据“/etc/rcS.d/”文件夹中对应的脚本启动Xwindow服务器“xorg”</p> <p>Xwindow为Linux下的图形用户界面系统。</p> <p>5、启动登录管理器,等待用户登录</p> <p>Ubuntu系统默认使用GDM作为登录管理器,您在登录管理器界面中输入用户名和密码后,便可……
查看全文
发表于:2007-12-06 ┆
阅读(222)
┆
评论(0)
剖析Linux系统启动过程[转载]
剖析Linux系统启动过程[转载]<br> <br> 本文以RedHat9.0和i386平台为例,剖析了从用户打开电源直到屏幕出现命令行提示符的整个Linux启动过程。并且介绍了启动中涉及到的各种文件。<br> <br> 阅读Linux源代码,无疑是深入学习Linux的最好方法。在本文对Linux启动过程的介绍中,我们也尝试从源代码的视角来更深入的剖析 Linux的启动过程,所以其中也简单涉及到部分相关的Linux源代码,Linux启动这部分的源码主要使用的是C语言,也涉及到了少量的汇编。而启动 过程中也执行了大量的shell(主要是bash shell)所写脚本。<br> <br> 当用户打开PC的电源,BIOS开机自检,按BIOS中设置的启动设备(通常是硬盘)启动,接着启动设备上安装的引导程序lilo或grub开始引导 Linux,Linux首先进行内核的引导,接下来执行init程序,init程序调用了rc.sysinit和rc等程序,rc.sysinit和rc 当完成系统初始化和运行服务的任务后,返回init;init启动了mingetty后,打开了终端供用户登录系统,用户登录成功后进入了Shell,这 样就完成了从开机到登录的整个启动过程。<br> <br> <br> 下面就将逐一介绍其中几个关键的部分: <br> <br> <br> 第一部分:内核的引导(核……
查看全文
发表于:2007-12-06 ┆
阅读(219)
┆
评论(0)
什么是initrd?(转载)
<DIV>initrd = init ramdisk,是一个启动时存在于内存的文件系统。<BR>initrd的最初的目的是为了把kernel的启动分成两个阶段:在kernel中保留<BR>最少最基本的启动代码,然后把对各种各样硬件设备的支持以模块的方式放在<BR>initrd中,这样就在启动过程中可以从initrd所mount的根文件系统中<BR>装载需要的模块。这样的一个好处就是在保持kernel不变的情况下,<BR>通过修改initrd中的内容就可以灵活的支持不同的硬件。在启动完成<BR>的最后阶段,根文件系统可以重新mount到其他设备上。</DIV> <DIV><BR>Linux启动一定要用initrd吗?</DIV> <DIV><BR>不必,如果把需要的功能全都编译到内核中(非模块方式),只需要一个内核文件<BR>即可,initrd能够减小启动内核的体积并增加灵活性。如果你的内核以模块方式<BR>支持某种文件系统(例如ext3, UFS),而启动阶段的驱动模块(如jbd)放在这些文件<BR>系统上,内核是无法读取文件系统的,从而只能通过initrd的虚拟文件系统来装载<BR>这些模块。<BR>这里有些人会问: 既然内核此时不能读取文件系统,那内核的文件是怎么装入内存<BR>中的呢?答案很简单,Grub是file-system sensitive的,能够识别常见的文件系统。<BR><BR>initrd文件是怎么生……
查看全文
发表于:2007-12-03 ┆
阅读(152)
┆
评论(0)
Linux question (转载)
<span style="font-weight: bold;">一.填空题</span><br>1. 在Linux系统中,以 方式访问设备 。<br>2. Linux内核引导时,从文件 中读取要加载的文件系统。<br>3. Linux文件系统中每个文件用 来标识。<br>4. 全部磁盘块由四个部分组成,分别为 。<br>5. 链接分为: 和 。<br>6. 超级块包含了 和 等重要的文件系统信息。<br>7. 某文件的权限为:drw-r--r--,用数值形式表示该权限,则该八进制数为: ,该文件属性是 。<br>8. 前台起动的进程使用 Ctrl+c 终止。<br>9. 静态路由设定后,若网络拓扑结构发生变化,需由 修改路由的设置。<br>10. 网络管理的重要任务是: 和 。<br>11. 安装Linux系统对硬盘分区时,必须有两种分区类型: 和 。<br>13. 编写的Shell程序运行前必须赋予该脚本文件 权限。<br>14. 系统管理的任务之一是能够在 环境中实现对程序和数据的安全保护、备份、恢复和更新。<br>15. 系统交换分区是作为系统 的一块区域。<br>16. 内核分为 、 、 和 等四个子系统。<br>17. 内核配置是系统管理员在改变系统配置 时要进行的重要操作。<br>18. 在安装Linux系统中,使用netconfig程序对网络进行配置,该安装程序会一步步提示用户输入主机名、域名、域名服务器、IP地址……
查看全文
发表于:2007-11-07 ┆
阅读(171)
┆
评论(0)
函数的可重入性及其编写规范(转)
<DIV>一、可重入函数 <BR>1)什么是可重入性? <BR>可重入(reentrant)函数可以由多于一个任务并发使用,而不必担心数据错误。相反, 不可重入(non-reentrant)函数不能由超过一个任务所共享,除非能确保函数的互斥(或者使用信号量,或者在代码的关键部分禁用中断)。可重入函数可以在任意时刻被中断,稍后再继续运行,不会丢失数据。可重入函数要么使用本地变量,要么在使用全局变量时保护自己的数据。 <BR><BR>2)可重入函数: <BR>不为连续的调用持有静态数据。 <BR>不返回指向静态数据的指针;所有数据都由函数的调用者提供。 <BR>使用本地数据,或者通过制作全局数据的本地拷贝来保护全局数据。 <BR>如果必须访问全局变量,记住利用互斥信号量来保护全局变量。 <BR>绝不调用任何不可重入函数。 <BR><BR>3)不可重入函数: <BR>函数中使用了静态变量,无论是全局静态变量还是局部静态变量。 <BR>函数返回静态变量。 <BR>函数中调用了不可重入函数。 <BR>函数体内使用了静态的数据结构; <BR>函数体内调用了malloc()或者free()函数; <BR>函数体内调用了其他标准I/O函数。 <BR>函数是singleton中的成员函数而且使用了不使用线程独立存储的成员变量 。 <BR>总的来说,如果……
查看全文
发表于:2007-06-18 ┆
阅读(302)
┆
评论(1)