Linux的那些事儿(3)----Linux环境下编程之UNIX基础知识

来源:互联网 发布:在淘宝上买百度云资源 编辑:程序博客网 时间:2024/05/17 20:28

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);