从三个方面理解系统编程
- 分析程序,了解功能
- 学习系统调用
- 自己编程实现
文件操作的相关命令
- cat,more,less,pg – 查看文件的内容
其中,对于more
命令,显式一屏后会暂停输出,按空格,more
会继续输出下一屏,按回车,会显式下一行,按q
则立刻退出 - Unix并不提供恢复被删除文件的功能,其中一个原因是Unix是多用户系统,当一个文件被删掉以后,其所占用的存储空间可能立即被分配给其他用户
- lpr – 打印文件
- 文件权限通过ls -l命令查看
more
命令实现
目前尚未解决用户输入空格或q后必须按回车的问题
#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;
}
结果如下图: