Linux编程实践Day1

从三个方面理解系统编程

  1. 分析程序,了解功能
  2. 学习系统调用
  3. 自己编程实现

文件操作的相关命令

  1. cat,more,less,pg – 查看文件的内容
    其中,对于more命令,显式一屏后会暂停输出,按空格,more会继续输出下一屏,按回车,会显式下一行,按q则立刻退出
  2. Unix并不提供恢复被删除文件的功能,其中一个原因是Unix是多用户系统,当一个文件被删掉以后,其所占用的存储空间可能立即被分配给其他用户
  3. lpr – 打印文件
  4. 文件权限通过ls -l命令查看

more命令实现

目前尚未解决用户输入空格或q后必须按回车的问题

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
#include<stdio.h>
#define PAGELEN 24
#define LINELEN 512
int ReplyMore(FILE *keyboard){
printf("\033[7m more? \033[m");
int ch;
while((ch=getc(keyboard)) != EOF){
if(ch == 'q')
return 0;
else if(ch == ' ')
return PAGELEN;
else if(ch == '\n')
return 1;
}
return 0;
}
void DoMore(FILE *fp){
char line[LINELEN];
int num_of_lines = 0;
int reply;
FILE *fp_tty = fopen("/dev/tty","r"); // 此文件为键盘和显示器的设备描述文件
while(fgets(line, LINELEN, fp)){
if(num_of_lines == PAGELEN){
reply = ReplyMore(fp_tty);
if(reply == 0)
break;
num_of_lines -= reply;
}
if(fputs(line, stdout) == EOF)
exit(1);
num_of_lines++;
}
}
int main(int argc, char *argv[]){
FILE *fp;
if(argc == 1)
DoMore(stdin);
else{
while(--argc){
if((fp = fopen(*++argv,"r")) != NULL){
DoMore(fp);
fclose(fp);
}
else{
exit(1);
}
}
}
return 0;
}

结果如下图:


Linux编程实践Day1
http://bugeater.space/2023/09/04/Linux编程实践Day1/
Author
BugEater
Posted on
September 4, 2023
Licensed under