Date:2009.5.7
Content:UNIX环境下高级编程 Chapter1:UNIX System Overview
1、所用书籍:《UNIX环境下高级编程》
(Advanced Programming in the UNIX® Environment: Second Edition)
2、实例代码下载地址:http://www.apuebook.com/src.tar.gz
虽然提供了代码,但是强力推荐自己在vim或者vi中敲入代码。
3、预备知识
(1) C/C++语言知识:在编程之前,你至少知道什么是函数、变量、结构体、指针、for/while/do..while等等。
(2) Linux知识:你至少会如何在vim/vi下编辑C/C++代码,然后知道用cc命令来编译你的C/C++代码。
(3) 确定你的UNIX版本:我选择的是Fedora Core10,内核版本为2.6,书中提供的代码是在2.4环境下运行的。所以Linux基础差的人,可以直接装RH9.0版本。
4、学习笔记
一、UNIX体系
1、系统调用System calls是内核的接口
2、shell是一种为其他应用程序提供接口的特殊的应用程序
3、Linux是GNU操作系统的内核,所以有人称之为GUN/Linux,更简便的称谓是Linux(这就是为什么GUN/Linux又叫Linux的原因)
二、登录
1、每当你登陆系统后,系统会找到口令文件,一般在/etc/passwd中,口令文件由下面七个部分组成:
sar:x:205:105:Stephen Rago:/home/sar:/bin/ksh
登录名:sar
密钥:x
用户id:205
用户组id:105
注释:Stephen Rago
父目录:/home/sar
shell 程序:/bin/ksh
三、文件和目录
1、文件名不能出现的两个字符:斜杠'/'和空字符:null
2、实例1.3. List all the files in a directory
************************************************************
利用函数opendir, readdir, 以及 closedir操作目录
opendir返回DIR结构体,然后将返回值传递给readdir
readdir读取每个DIR的实例,一般用循环操作
closedir用户关闭
************************************************************
四、输入输出
1、文件描述符:一般是一个小的非负整型数字
2、标准输入、输出、错误
3、实例1.4:非缓冲输入输出
************************************************************
常量:STDIN_FILENO、 STDOUT_FILENO 在头文件<unistd.h>定义
如果执行./a.out <file1>file2将会把file1的内容输入到file2中
************************************************************
4、实例1.5:拷贝标准的输入到标准的输出
************************************************************
fget()函数读一完整的行,read函数读指定字节数
函数getc一次读一个字符,然后函数putc将此字符写到标准输出,读到输入的最后一个字节时
,getc返回常量EOF,该常量在stdio.h中定义
************************************************************
五、程序和进程
1、实例1.6 :打印当前进程ID
************************************************************
利用函数getpid()即可获得当前进程ID
************************************************************
2、实例1.7:从标准输入读命令并执行
********************************************************************
fget从标准输入一次读一行,当键入文件结束字符作为行的第一个字符是,fgets返回null
fork创建一个新进程,新进程是调用进程的复制品,我们称调用进程为父进程,新创建的为子进程
execlp用以执行从标准输入读入的命令
子进程调用execlp执行新程序文件,而父进程希望等待子进程终止,这一要求有调用waitpid实现
********************************************************************
六、错误处理
1、C语言提供两种方式用户打印错误信息
#include <string.h>
char *strerror(int errnum);
|
Returns: pointer to message string |
#include <stdio.h>
void perror(const char *msg);
|