一 Unix系统原理
-----学习一个函数一定要注意它的**传入值与返回值**具体内容,有时可根据函数功能猜测返回值的返回方式,这是有一定规范的。
- 计算机用操作系统来管理所有的资源,将不同设备与程序通过操作系统连接起来。从连接的角度来讲,键盘和显示卡直接连接到计算机的主板上,CPU和内存(设备)通过插槽直接连接到主板上,而操作系统相当于主板上的电路印刷板。
- 操作系统也是程序,是一个特殊的程序,存储在内存中,该程序实现“将其他程序与设备连接起来”的功能。操作系统中最基本最重要的程序被称为内核kernel。 --内核与操作系统的区别:
二 more命令实现
-
more命令:打印输出文件内容 ;
bc命令:将用户输入算是转化为逆波兰表达式传给远程dc,dc执行完后返回计算结果。 -
Linux下main函数的参数:
(1)argc:命令行参数的个数(包括最开始的可执行文件名称)(2)argv(指针数组):字符指针的数组,每个元素都是一个指向字符串的字符指针,而字符串就是命令行中的每一个参数;
数组长度与argc的值一样,代表命令行参数个数
-
fopen命令—<stdio.h>
标准格式:FILE *fopen(char *filename, char *mode);
其中的filename与mode都是指向字符串的指针。
FILE 是 <stdio.h> 头文件中的一个结构体,它专门用来保存文件信息。
例子:FILE *fp = fopen("D:\\demo.txt","rb+");
—字符串常量就可作为指针传递
返回NULL则说明打开失败。 -
FILE *fp;
FILE是在stdio.h中定义的结构体类型,封装了与文件有关的信息,如文件句柄、位置指针及缓冲区等,缓冲文件系统为每个被使用的文件在内存中开辟一个缓冲区,
用来存放文件的有关信息,这些信息被保存在一个FILE结构类型的变量中,fp是一个指向FILE结构体类型的指针变量。
要想该指针指向一个文件,并操纵它,则需要:fp=fopen(xxxx)
;输入,输出,错误流可直接赋给fp指针。 -
fgets函数—详见:fgets详解
原型:char* fgets(s,n,stdin);----如果读入错误或遇到文件结尾(EOF),则返回NULL.
假设在控制台下,我们可以用fgets(…)替代gets(),读入键盘输入的信息,fgets()是安全的,因为不会像gets()有溢出的可能。
比如 :输入 abc
fgets(s,n,stdin)也会读入n-1个字符(第n个位置用来放置’\0’,存入s中)。但是只是从stdin流读入。
-
fputs见博客:linux下C语言
-
exit()函数与return
exit命令:执行exit可使shell以指定的状态值退出。若不设置状态值参数,则shell以预设值退出。状态值0代表执行成功,其他值代表执行失败。
具体区别:
*(1)作用不同。exit用于在程序运行的过程中随时结束程序,exit的参数是返回给OS的。exit是结束一个进程,它将删除进程使用的内存空间,同时把错误信息返回父进程。而return是返回函数值并退出函数;
*(2)语义层级不同。return是语言级别的,它表示了调用堆栈的返回;而exit是系统调用级别的,它表示了一个进程的结束;
*(3)使用方法不用。return一般用在函数方法体内,exit可以出现在Shell脚本中的任意位置。
总结 -
gdb调试–
info b; p x; n; r; b 9; delete 2-----------等等 -
如何在VS下向main中传入文件参数进行打开
项目–》工程属性–》调试–》命令参数
如果是相对路径的话,只能打开当前cpp文件所在目录之下的文件----格式如下:
绝对路径:可直接从<我的电脑>上复制绝对路径----win10 下路径是反斜杠’’(现在VS可智能识别,不用转义,即不用写’\’);linux下路径是‘/’ -
总结及思考
more命令的实现中学到了:
* main函数传参的知识以及远程调控,gdb调试
* 标准输入流不仅仅代表键盘,输入流是可以重定向的(方式有|, <),
* 各种读取输出函数,比如getc(),putc()函数等等
* linux下有专门的文件**"/dev/tty"**来代表键盘与屏幕的输出与输入,可利用文件指针对改文件读写操作,相当于对键盘和屏幕进行读写操作(写相当于显示在屏幕上,读同理)。
* 多行复制与粘贴的方法ndd,nyy,p
* 如何不输入回车直接读入终端字符?----从标准输入不回车直接获取