Unix/Linux编程实践教程 笔记一
来源:互联网 发布:微信运动数据更新时间 编辑:程序博客网 时间:2024/06/11 09:37
自己动手编写Linux中 more命令
第一版 more01.c
#include <stdio.h>#include <stdlib.h>#define PAGELEN 24#define LINELEN 512void do_more(FILE *);int see_more();int main(int ac, char *av[]){ FILE *fp; if(ac == 1) do_more(stdin); else while(--ac) if((fp = fopen(* ++av,"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 reply; while(fgets( line ,LINELEN , fp)) { if(num_of_lines == PAGELEN) { reply = see_more(); if(reply == 0) break; num_of_lines -= reply; } if(fputs(line,stdout) == EOF) exit(1); num_of_lines++; }}int see_more(){ int c; printf("\033[7m more? \033[m"); while((c = getchar()) != EOF) { if(c == 'q') return 0; if(c == ' ') return PAGELEN; if(c == '\n') return 1; } return 0;}
收获
1.FILE * fopen(const char * path,const char * mode);
返回值:文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno中。
一般而言,打开文件后会做一些文件读取或写入的动作,若打开文件失败,接下来的读写动作也无法顺利进行,所以一般在fopen()后作错误判断及处理。
参数说明:
参数path字符串包含欲打开的文件路径及文件名(字符串常量,字符数组),参数mode字符串则代表着流形态("r"只读,"r+"读写)。
2.int fclose( FILE *fp );
返回值:如果流成功关闭,fclose 返回 0,否则返回EOF(-1)。(如果流为NULL,而且程序可以继续执行,fclose设定error number给EINVAL,并返回EOF。)功能是关闭一个流。
注意:使用fclose()函数就可以把缓冲区内最后剩余的数据输出到内核缓冲区,并释放文件指针和有关的缓冲区。
3.函数原型char *fgets(char *buf, int bufsize, FILE *stream);
参数
*buf: 字符型指针,指向用来存储所得数据的地址。
bufsize: 整型数据,指明存储数据的大小。*
stream: 文件结构体指针,将要读取的文件流。
返回值
- a.成功,则返回第一个参数buf;
- b.在读字符时遇到end-of-file,则eof指示器被设置,如果还没读入任何字符就遇到这种情况,则buf保持原来的内容,返回NULL;
- c.如果发生读入错误,error指示器被设置,返回NULL,buf的值可能被改变。
从文件结构体指针stream中读取数据,每次读取一行。读取的数据保存在buf指向的字符数组中,每次最多读取bufsize-1个字符 (第bufsize个 字符 赋'\0'),如果文件中的该行,不足bufsize个字符,则读完该行就结束。如若该行(包括最后一个换行 符) 的字符数超过bufsize-1,则fgets只 返回一个不完整的行,但是,缓冲区总是以NULL字符结尾,对fgets的下一次 调用会继续读该行。函数成功将返回buf,失败或读到文件结尾返 回NULL。因此我们不能直接通过fgets的返回值来判断函 数是否是出错而终止的,应该借助feof函数或者ferror函数来判断。
功能 标准输出设备刷清?
4.int fputs(str,fp)
str是字符型指针 fp是文件型指针
fputs是一种函数,具有的功能是向指定的文件写入一个字符串(不自动写入字符串结束标记符‘\0’)。成功写入一个字符串后,文件的位置指针会自动后移,函数返回值为非负整数;否则返回EOF(符号常量,其值为-1)。
5.字符常量在内存中占4个字节,存放的是字符的ASCII码(整型数据)
c语言规定所有字符常量都作为整型量来处理
在c中,char,int可通用
6.LInux下 编译c 命令 gcc -o more01 more01.c
执行命令 ./more01
0 0
- Unix/Linux编程实践教程 笔记一
- unix/linux编程实践教程------学习笔记
- 《unix/linux编程实践教程》之Shell编程一
- Unix/Linux编程实践教程
- Unix/Linux编程实践教程
- Unix-linux编程实践教程
- UNIX 编程实践教程学习笔记 (一)
- 《Unix-Linux编程实践教程》读书笔记(一)
- Unix/Linux 编程实践教程 第6章 笔记
- Unix/Linux编程实践教程参考答案-----第二章学习笔记
- unix/linux编程实践教程------学习笔记(第二章)
- unix/linux编程实践教程------学习笔记(三)
- unix/linux编程实践教程------学习笔记(四)
- unix/linux编程实践教程------学习笔记(五)
- 《unix/linux编程实践教程》学习笔记:第一章概论
- 《unix/linux编程实践教程》学习笔记:第九章 shell
- 《unix/linux编程实践教程》之管道
- unix/linux编程实践教程--more命令
- Maven项目导入eclips时,运行tomcat报错Exception starting filter encodingFilter错误
- Eclispse 换主题、皮肤、配色,换黑色主题护眼
- 上传excle Jxl读取Excel 导入数据
- QuantLib 以及 python 相关
- 一行命令搞定node.js 版本升级
- Unix/Linux编程实践教程 笔记一
- 单链表的java语言完整实现含添加删除节点
- 系统环境变量详解
- Java transient关键字
- PythonTip(21~25)题详解
- 修改cell.imageView的大小
- KETTLE公式组件学习
- linux中java 里面启动 重启 停止jar 的 shell
- C++