以下都是个人总结,难免有缺漏差错,小可爱们记得以课本为准~
(1)什么是操作系统?什么是UNIX操作系统?什么是Linux操作系统?它们之间的关系是怎样的?
操作系统:控制计算机硬件和软件资源,对作业进行合理的调度,以供用户方便使用的一组软件的集合。
UNIX操作系统,是一个强大的多用户、多任务操作系统,支持多种处理器架构,按照操作系统的分类,属于分时操作系统。
Linux,即GNU/Linux,是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。
Linux继承了Unix以网络为核心的设计思想,它能运行主要的UNIX工具软件、应用程序和网络协议。
(2)UNIX操作系统有哪些典型的分支?
Linux,Mac OS X,BSD系列与Solaris
(3)什么是Shell?内置变量 $$、$*、$@、$?、$#
的具体含义是什么?
shell是一个命令语言解释器,是用户和UNIX内核直接的接口,它拥有自己内建的shell命令集,shell也能被系统中其他应用程序所调用。用户在提示符下输入的命令都由shell先解释然后传给UNIX核心。
$$是shell脚本运行的当前进程ID号
$*是以一个单字符串显示所有向shell脚本传递的参数
$@是传递给shell脚本的所有参数列表
$?显示最后命令的退出状态,0表示没有错误,其他表示有错误
$#是传给脚本的参数个数
(4)常用的Shell命令,如ls、cd、dd、pwd、ps、cp、chown、chmod、mkdir等的具体用法。
ls 列出目录下的文件
cd 改变当前目录
dd 用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换(cc已被用来代表CComplier)
pwd 查看当前工作目录
ps显示系统中当前运行的进程状态
cp 复制文件
chown 更换所有者
mkdir 创建一个目录
chmod 改变文件访问权限
(5)什么是内部命令?什么是外部命令?它们的区别是什么?
1.内部命令在系统启动时就调入内存,是常驻内存的,所以执行效率高。(cd,source,fg)
2.外部命令是系统的软件功能,用户需要时才从硬盘中读入内存。(cat,ls)
内部命令:内部命令被构建在shell之中。当执行shell命令时,内部命令的执行速度非常快。这是因为没有其他的进程因为执行这条命令而被创建。比如说,当我们执行“cd”命令时,没有进程被创建。在执行过程中只是简单的改变当前的目录。
外部命令:外部命令并没有被构建在shell中。这些可执行的外部命令保存在一个独立的文件当中。当一个外部命令被执行时,一个新的进程即被创建同时命令被执行。比如说,当我们执行“cat”(通常被保存在/usr/bin目录下)命令时,然后/usr/bin/cat被执行。
(6)什么是C语言的头文件?有哪些是操作系统提供的头文件?哪些是C语言的标准头文件?
头文件作为一种包含功能函数、数据接口声明的载体文件,主要用于保存程序的声明。
C语言的标准头文件:ISOC标准定义的头文件
操作系统提供的头文件:POSIX标准定义的头文件
(7)C语言程序的基本结构是怎样的?编译器怎样搜索头文件?
顺序结构,选择结构,循环结构
C语言,使用include指令,包含头文件,但又细分两种形式:
形式一:#include “file1”
gcc先在当前目录(指包含本条#include指令的源文件所在的目录)寻找file1,如果找不到,继续在由-iquote选项(如果有的话)指定的目录中寻找file1。
例如,在文件/usr/include/sys/stat.h中,包含指令#include “types.h”,那么gcc先在/usr/include/sys目录下寻找types.h文件。嗯,在该目录下,确实存在一个types.h的文 件。现假设我们把这个文件移动到另一个目录:mv /usr/include/sys/types.h /bar/foo/,我们在编译时,可以通过-iquote选项,在不改变stat.h的情况下,正常编译(当然,通常不建议这样做):
gcc -iquote /bar/foo -I/usr/include/sys *.o
形式二:#include <file2>
gcc按照以下顺序查找file2:
-Idir1 -Idir2 ...
/usr/local/include
libdir/gcc///include
/usr//include
/usr/include
第 一行中,-Idir1 -Idir2 … 是用户通过gcc的-I选项指定的目录。值得一提的是,放在/usr/local/include/下的头文件也会被gcc自动的检索,这与/usr /local/lib/目录下的库处理方式是不一样的。
(8)怎样利用gcc编译源文件?gcc的-o、-e、-static、-Wall等选项的具体含义是什么?怎样使用?
-o 制定目标名称,缺省的时候,gcc 编译出来的文件是a.out
-e 使用-E 选项,执行预处理工作
-static 此选项将禁止使用动态库,所以,编译出来的东西,一般都很大,也不需要什么动态连接库,就可以运行
-Wall 生成所有警告信息
(9)什么是动态链接库?什么是静态链接库?怎样用静态链接的方式编译C程序?
静态库是在链接阶段被链接的,所以生成的可执行文件就不受库的影响了,即使库被删除了