Unix-Linux编程实践教程-chapter01-more
Pin Young Lv9

第一章 Unix系统编程概述

程序中所有对设备的操作都是通过内核进行的

在登陆过程中,当用户名和密码通过验证后,系统会启动一个叫做shell的进程,然后把
用户交给这个进程,由这个进程处理用户的请求,每个用户都有属于自己的shell进程

ps命令可以列出系统中运行的所有进程

自己动手实践一个more,用来查看文件

Unix编程不是很难,但也不是轻而易举的事情

计算机系统中包含了很多系统资源,如硬盘,内存,外围设备,网络连接等,程序利用
这些资源来对数据进行存储,转换和处理

多用户系统需要一个中央管理程序,Unix的内核就是这样的程序,它可以对程序和资源进行管理

用户程序访问设备必须通过内核

一些Unix的系统功能是由多个程序的协作而实现的

要编写系统程序,必须对系统调用和相关的数据结构有深入的理解

code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <stdio.h>

#define PAGELEN 24
#define LINELEN 512

void do_more(FILE *);
int see_more(FILE *);

int main(int argc, char * argv[])
{
FILE * fp;
if (argc == 1)
do_more(stdin);
else
while(--argc)
if ((fp = fopen(* ++argv, "r")) != NULL)
{
do_more(fp);
fclose(fp);
}
else
exit(1);
return 0;
}

void do_more(FILE * fp)
{
char line[LINELEN];
int num_of_lines = 0;
int see_more(FILE *), reply;
FILE * fp_tty;
fp_tty = fopen("/dev/tty", "r");
if (fp_tty == NULL)
exit(1);
while(fgets(line, LINELEN, fp))
{
if (num_of_lines == PAGELEN)
{
reply = see_more(fp_tty);
if (reply == 0)
break;
num_of_lines -= reply;
}
if (fputs(line, stdout) == EOF)
exit(1);
num_of_lines++;
}
}

int see_more(FILE * cmd)
{
int c;
printf("\033[7m more? \033[m");
while ((c = getc(cmd)) != EOF)
{
if (c == 'q')
return 0;
if (c == ' ')
return PAGELEN;
if (c == '\n')
return 1;
}
return 0;
}