下面这个例子列出了所有系统定义的错误代码及错误描述
源代码是:
/************关于本文档********************************************
*filename: strerror.c
*purpose: 列出了系统定义的所有错误代码及描述
*wrote by: zhoulifa(zhoulifa@163.com) 周立发(http://zhoulifa.bokee.com)
Linux爱好者 Linux知识传播者 SOHO族 开发者 最擅长C语言
*date time:2008-01-26 21:03 上海大雪天,据说是多年不遇
*Note: 任何人可以任意复制代码并运用这些文档,当然包括你的商业用途
* 但请遵循GPL
*Thanks to:
* Ubuntu 本程序在Ubuntu 7.10系统上测试完全正常
* Google.com 我通常通过google搜索发现许多有用的资料
*Hope:希望越来越多的人贡献自己的力量,为科学技术发展出力
* 科技站在巨人的肩膀上进步更快!感谢有开源前辈的贡献!
*********************************************************************/
#include <string.h> /* for strerror */
#include <errno.h>
#include <stdio.h>
int main(int argc, char ** argv) {
int i = 0;
& ......
1、LINUX下TTY、CONSOLE、串口之间是怎样的层次关系?具体的函数接口是怎样的?串口是如何被调用的?
tty和console这些概念主要是一些虚拟设备的概念,而串口更多的是指一个真正的设备驱动。Tty实际是一类终端I/O设备的抽象,它实际上更多的是一个管理的概念,目的是向上层的VFS提供一个统一的接口。通过file_operations结构中的tty_ioctl可以对其进行配置。查tty_driver,你将得到n个结果,实际都是相关芯片的驱动。因此,可以得到的结论是:每个描述tty设备的tty_struct在初始化时必然挂接了某个具体芯片的字符设备驱动(不一定是字符设备),可以是很多,包括显卡或串口chip。
而console是一个缓冲的概念,它的目的有一点类似于tty。实际上console不仅和tty连在一起,还和framebuffer连在一起,具体的原因看下面的键盘的中断处理过程。Tty的一个子集需要使用console(典型的如主设备号4,次设备号1―64),但是要注意的是没有console的tty是存在的。而串口则指的是tty_driver。 举个典型的例子,分析一下键盘的中断处理过程:
keyboard_interrupt―>handle_kbd_event―>handle_keyboard_even ......
# tar -zxvf mysql-5.0.45.tar.gz -C /usr/src/
# cd /usr/src/mysql-5.0.45
# ./configure --prefix=/usr/local/mysql --with-charset=gbk
--localstatedir=/usr/local/mysql/data
# make
# make install
# groupadd mysql
# useradd mysql -g mysql
# cd /usr/local/mysql/bin
# ./mysql_install_db --user=mysql
# cd /usr/local/mysql
# chown -R root .
# chown -R mysql data
# chown -R mysql data/ .
# chown -R mysql data/mysql/ .
# chgrp -R mysql .
# /usr/local/mysql/bin/mysqld_safe --user=mysql &
# netstat -tnl |grep 3306
# /usr/local/mysql/bin/mysql -uroot -p
# show database;
# /usr/local/mysql/bin/mysqladmin -uroot password 6220104
# cp /usr/local/mysql/share/mysql/mysql.server /etc/init.d/mysqld
# cd /etc/init.d/
# chmod +x mysqld
# chkconfig mysqld
# chkconfig --add mysqld
# chkconfig --level 345 mysqld on
# service mysqld stop
# cp /usr/local/mysql/bin/* /usr/bin/
到此mysql-5.0.45 安装完成。 ......
# tar -zxvf mysql-5.0.45.tar.gz -C /usr/src/
# cd /usr/src/mysql-5.0.45
# ./configure --prefix=/usr/local/mysql --with-charset=gbk
--localstatedir=/usr/local/mysql/data
# make
# make install
# groupadd mysql
# useradd mysql -g mysql
# cd /usr/local/mysql/bin
# ./mysql_install_db --user=mysql
# cd /usr/local/mysql
# chown -R root .
# chown -R mysql data
# chown -R mysql data/ .
# chown -R mysql data/mysql/ .
# chgrp -R mysql .
# /usr/local/mysql/bin/mysqld_safe --user=mysql &
# netstat -tnl |grep 3306
# /usr/local/mysql/bin/mysql -uroot -p
# show database;
# /usr/local/mysql/bin/mysqladmin -uroot password 6220104
# cp /usr/local/mysql/share/mysql/mysql.server /etc/init.d/mysqld
# cd /etc/init.d/
# chmod +x mysqld
# chkconfig mysqld
# chkconfig --add mysqld
# chkconfig --level 345 mysqld on
# service mysqld stop
# cp /usr/local/mysql/bin/* /usr/bin/
到此mysql-5.0.45 安装完成。 ......
< type="text/javascript"><!--
google_ad_client = "pub-3936520987820628";
//250x250, 创建于 07-12-28
google_ad_slot = "5080959190";
google_ad_width = 250;
google_ad_height = 250;
//-->
< src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
1.修改vftpd配置文件
vi /etc/vsftpd
.conf #listen=YES
vi /etc/xinetd.d/vsftpd 将“disable=yes” 改为 “disable=no”使xinetd服务启动后接收到ftp连接请求时,能够自动启动vsftpd服务进程
2. mkdir -p /srv/ftp/linux-10 创建文件夹 -p 如果文件夹不存在自动创建 &nbs ......
在linux下通过svn更新了一个php文件,目的是想通过执行这个文件来读数据插入到数据库。在其中的几台执行没有问题,其中一台就发现了Could not open input file这个错误,后来查找资料才发现原来是文件格式的问题,出错时文件格式是dos,可以在vi中用:set ff来查看,如果是dos格式,那么则用:set ff=unix来设置新的格式,这样就没问题了。 ......
在linux下通过svn更新了一个php文件,目的是想通过执行这个文件来读数据插入到数据库。在其中的几台执行没有问题,其中一台就发现了Could not open input file这个错误,后来查找资料才发现原来是文件格式的问题,出错时文件格式是dos,可以在vi中用:set ff来查看,如果是dos格式,那么则用:set ff=unix来设置新的格式,这样就没问题了。 ......
内核启动的现在已经是开始执行函数start_kernel函数了。start_kernel函数在init/main.c中定义。start_kernel函数只是完成
相应的结构的初始化任务。
printk(KERN_NOTICE);
printk(linux_banner);
setup_arch(&command_line);
在uboot的一直过程中,uboot传递给kernel的参数:预先存放在某个地方的tag和机器类型id,机器类型id在函数__look_up_machine
中已经使用,tag列表是在函数setup_arch中调用的。setup_arch函数是在arch/arm/kernel/setup.c中定义:
void __init setup_arch(char **cmdline_p)
{
....
setup_processor(); // 处理器相关的设置
mdesc = setup_machine(machine_arch_type); // 得到machine_desc结构
machine_name = mdesc->name;
...
if (mdesc->boot_params) // 定义了uboot的参数
tags = phys_to_virt(mdesc->boot_params); // 得到uboot参数tag地址
...
if (tags->hdr.tag == ATAG_CORE) {
& ......
内核启动的现在已经是开始执行函数start_kernel函数了。start_kernel函数在init/main.c中定义。start_kernel函数只是完成
相应的结构的初始化任务。
printk(KERN_NOTICE);
printk(linux_banner);
setup_arch(&command_line);
在uboot的一直过程中,uboot传递给kernel的参数:预先存放在某个地方的tag和机器类型id,机器类型id在函数__look_up_machine
中已经使用,tag列表是在函数setup_arch中调用的。setup_arch函数是在arch/arm/kernel/setup.c中定义:
void __init setup_arch(char **cmdline_p)
{
....
setup_processor(); // 处理器相关的设置
mdesc = setup_machine(machine_arch_type); // 得到machine_desc结构
machine_name = mdesc->name;
...
if (mdesc->boot_params) // 定义了uboot的参数
tags = phys_to_virt(mdesc->boot_params); // 得到uboot参数tag地址
...
if (tags->hdr.tag == ATAG_CORE) {
& ......