Linux系统编程复习提纲答案_第1页
Linux系统编程复习提纲答案_第2页
Linux系统编程复习提纲答案_第3页
Linux系统编程复习提纲答案_第4页
Linux系统编程复习提纲答案_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、题型分布:1、 选择题(20分)2、 填空题(20分)3、 程序阅读题(20分)4、 程序填空题(20分)5、 程序设计题(20分)知识点分布:1、 系统概述1、 Linux系统构成内核、shell、文件系统、应用程序2、 内核三大功能管理硬件、管理内存、管理进程3、 了解GNU计划GNU计划,有译为“革奴计划”,是由理查德·斯托曼在1983年9月27日公开发起的自由软件集体协作计划。它的目标是创建一套完全自由的操作系统GNU。4、 文件系统概念一种存储和组织计算机文件和数据的方法5、 Linux支持的文件系统类型文件系统是一种存储和组织计算机文件和数据的方法Linux支持多种文件系

2、统包括:EXT2、EXT3、EXT4、FAT、NTFS、ISO9660等。Linux操作系统使用虚拟文件系统(VFS)向上和用户进程文件访问系统调用接口,向下和具体不同文件系统的实现接口。6、 了解LInux的应用领域服务器领域,嵌入式系统,超级计算机,桌面应用领域2、 Linux系统操作1、 了解LInux内核的目录结构/bin:存放常用命令/boot:存放启动程序/dev:存放设备文件/etc:存放启动,关闭,配置程序与文件/home:用户工作根目录/lib:存放共享链接库/root:超级用户的工作目录/sbin:系统管理员的常用管理程序/tmp:存放临时文件/lost+found:系统出

3、现异常时,用于保存部分资料 /misc:一些实用工具/mnt:光驱、硬盘等的挂载点/media:光驱的自动挂载点/proc:操作系统的实时信息/sys:系统中的硬件设备信息/srv:服务启动后需要提取的信息/var:主要存放系统日志/usr:存放用户程序/tftpboot:tftp服务器的服务目录2、 系统命令Useradd 添加用户Passwd 设置账户密码Su 切换用户Cp 拷贝Mv 移动或更名Rm 删除文件或目录Mkdir 创建目录Cd 改变工作目录Pwd 查看当前路径Ls 常看目录Tar 打包与压缩Chmod 改变访问权限Mount 挂载Unmount 卸载Grep 查找字符串Ps 查

4、看进程3、 熟悉文件访问权限设置r 可读(4)w 可写(2)x 可执行(1)例:chmod 761 hello.c$ ls -l sobsrc. tgz-rw-r-r- 1 root root 483997 Ju1 l5 17:3l sobsrc. tgz文件所有者与所有者同组的用户系统中其他用户 chmod格式:chmod who + | - | = mode 文件名参数:who:u 表示文件的所有者。g 表示与文件所有者同组的用户。o 表示“其他用户”。a 表示“所有用户”。它是系统默认值。mode:+ 添加某个权限- 取消某个权限= 赋予给定权限例:chmod g+w hello.c3、

5、 Linux编程工具1、 vi三大模式及其切换方法键入i进入插入模式按Esc键退出到命令行模式按shift+;键,即:键进入底行模式2、 常用vi命令Yy 复制当前光标所在行nyy 复制当前光标开始的n行Dd 删除当前光标所在行ndd 删除当前光标所在行开始的n行P粘贴复制的内容到光标所在行底行模式功能键:w保存:q! 强制退出(对修改不做保存):wq 保存退出:set nu 显示行号3、 gcc编译程序的四个阶段,生成哪些文件及其编译对应选项预处理-E、编译-S、汇编-c、链接4、 编译选项-I、-L的作用-I dir 在头文件的搜索路径列表中添加dir目录-L dir 在库文件的搜索路径列

6、表中添加dir目录(-l参数就是用来指定程序要链接的库,-l参数紧接着就是库名)5、 GDB的作用,如何启动GDBgdb +调试程序名gdb file 调试程序名6、 GDB常用命令List 查看文件Break 设置断点Info break 查看断点情况Delete(n) 删除N号断点Next 单步运行Step 单步运行(有函数调用的时候,s会进入该函数而n不会进入该函数)Print 查看变量的值6、 makefile文件的作用,构成makefile的三大要素是什么?能看懂简单的makefile文件目标 :依赖 命令main:main.o fun.o(Tab)gcc main.o fun.o

7、-o mainmain.o:main.c fun.h(Tab)gcc -c main.c -o main.ofun.o:fun.c fun.h(Tab)gcc -c fun.c -o fun.oclean:(Tab)rm -f main *.o4、 文件编程1、 文件打开后在内核中的3大数据结构及其作用文件描述符表:文件描述符标志文件表项:文件状态标志,当前文件偏移量,I节点表项指针I节点表项:文件类项和对该文件的操作函数指针,当前文件长度,i节点2、 系统调用和库函数的区别(可移植性)库函数是对系统调用的封装(不是所有的库函数都是),为的是解决一些公共的问题和提供统一的系统调用的接口,他和系

8、统调用的优缺点就是:系统调用速度是明显要快于库函数(并不一定全部是,但绝大部分是),但系统调用缺乏移植性。库函数速度要慢,但解决了移植问题。3、 利用文件系统调用函数实现cp命令,例如./a.out a.txt b.txt当前目录下的a.txt到b.txt4、 通过leek函数,计算文件大小。#include<sys/type.h>#include<unistd.h>off_t lseek (int fd,off_t pos,int origin);fd 文件描述符origin SEEK_CUR:若pos为0,返回当前文件位置(相对文件当前读写指针的位置+pos)SEE

9、K_END: 若pos为0,设为文件尾部(相对当前文件长度+pos)SEEK_SET: 若pos为0,设文件开始(将文件设置成pos)Pos 文件偏移量返回值:成功返回新文件位置,失败返回-15、 什么是空洞文件?是否占用磁盘空间?利用lseek()查找文件尾部后n个字节(该位置读请求返回EOF),若该位置有读要求,文件旧长度与新长度之间用0填充,该0填充区间为“空洞”(不占任何物理磁盘空间)空洞文件部分读取请求会返回相应的二进制0。6、 什么是原子操作?进行原子操作目的何在?让一个进程多个步骤操作文件时,不允许别的进程做类似的操作,即把操作调整成为原子操作(该操作绝不会在执行完毕前被任何其他

10、任务或事件打断)主要用于实现资源计数7、 实现cat命令查看文件内容,例如./a.out a.txt可以打印a.txt内容8、 文件锁的概念?如何给文件上锁?当多个用户共同使用、操作一个文件的时候,linux通常采用的方法是给文件上锁,来避免共享资源产生竞争的状态 int fcntl (int fd, int cmd, struct flock *lock);参数 fd 表示文件描述符;cmd:F_SETLK 、 F_SETLKW(wait阻塞) 、F_GETLK的三个取值 struct flock  .short l_type;  /* Type of lock

11、(锁类型): F_RDLCK(共享读锁)、F_WRLCK(独占性写锁)或F_UNLCK(解锁一个区域) */short l_whence; /* How to interpret l_start(相对位置:起始点):SEEK_SET, SEEK_CUR, SEEK_END */off_t l_start; /* Starting offset for lock */(偏移量:相对位移量 offset)off_t l_len;   /* Number of bytes to lock */(锁长度 0表示从指定位置到文件尾部)pid_t l_pid;  

12、/* PID of process blocking our lock (F_GETLK only) */(进程号(上锁时不需要,查询时使用));9、 编程实现两个进程同时对同一个文件每隔一秒钟写入一个字节的数据,对文件上锁以实现数据安全。10、 存储映射的原理。存储映射使一个磁盘文件与存储空间的一个缓存相映射,对缓存数据的读写就相应的完成了文件的读写11、 编程实现,利用存储映射函数将一文件映射的用户空间,然后读取信息并打印出来。12、 利用库函数进行文件读写操作,新建一个学生信息结构体student,数据成员有名字,年龄,性别等,利用库函数把信息保存在文件stu.dat中,然后再读取出来5

13、、 文件属性和目录编程        1、 了解stat结构体struct stat            mode_t     st_mode;       /文件访问权限         

14、;  ino_t      st_ino;       /索引节点号           dev_t      st_dev;        /文件使用的设备号   &#

15、160;       dev_t      st_rdev;       /设备文件的设备号           nlink_t    st_nlink;      /文件的硬连接数

16、0;            uid_t      st_uid;        /所有者用户识别号           gid_t      st_gid; &

17、#160;      /组识别号             off_t      st_size;       /以字节为单位的文件容量           time_t&

18、#160;    st_atime;      /最后一次访问该文件的时间           time_t     st_mtime;      /最后一次修改该文件的时间         

19、;  time_t     st_ctime;      /最后一次改变该文件状态的时间           blksize_t st_blksize;    /包含该文件的磁盘块的大小          &#

20、160;blkcnt_t   st_blocks;     /该文件所占的磁盘块   2、 编程实现,打印输出文件属性信息。3、 了解Linux系统中的7种文件类型普通文件、目录文件、块特殊文件、字符特殊文件、FIFO(管道文件)、套接字、符号链接4、 了解umask函数或者命令的作用#include<sys/stat.h>mode_t umask(mode_t mode);返回:以前的文件模式创建屏蔽字mode(权限位):5、 什么是硬链接和软链接?它们之间的区别。硬链接

21、是有着相同 inode 号仅文件名不同的文件文件有相同的 inode 及 data block;只能对已存在的文件进行创建;不能交叉文件系统进行硬链接的创建;不能对目录进行创建,只可对文件创建;删除一个硬链接文件并不影响其他有相同 inode 号的文件。文件用户数据块中存放的内容是另一文件的路径名的指向,则该文件就是软连接软链接有着自己的 inode 号以及用户数据块。因此软链接的创建与使用没有类似硬链接的诸多限制:区别:软链接有自己的文件属性及权限等;可对不存在的文件或目录创建软链接;软链接可交叉文件系统;软链接可对文件或目录创建;创建软链接时,链接计数 i_nlink 不会增加;删除软链接

22、并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即 dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。6、 编程实现类似ls -R的功能,递归显示目录及其子目录里面的内容。6、 进程控制1、 了解程序和进程。进程操作系统中被加载到内存中的、正在运行的应用程序实例程序与进程的区别:程序是存放在磁盘上的一系列代码和数据的可执行映像,是一个静止的实体。进程是一个执行中的程序,它是动态的实体2、 什么是进程id?如何获得进程id?进程ID(PID)每个Linux程序都有一个唯一的数字标识符,称为进程ID,进程ID是一个非负整数3、 程序在执

23、行main函数之前,内核会启动特殊例程,特殊例程的作用。启动例程工作:1)搜集命令行参数,传递给argc,argv2)搜集环境信息,并构建环境变量,传递给main函数,或以其他方式传递给进程3)登记终止函数然后main函数开始执行,一直碰到return语句(main),或exit(n)进程结束,然后系统获取终止码(shell中$?获取,0-255)。4、 进程终止的几种方式?正常终止从main返回调用exit调用_exit或_Exit最后一个线程从启动例程返回最后一个线程调用pthread_exit异常终止调用abort(和信号有关)接收到一个信号并终止(和信号有关)最后一个线程对取消请求做出

24、响应进程返回:通常程序运行成功返回0,否则返回非05、 exit()和_exit()函数的区别输入输出缓冲区(标准C语言库)是否刷新(通过终止函数实现)终止函数(无参数、返回值函数)(atexit()登记) 是否自动调用;终止函数执行顺序和登记顺序正相反(内部由栈结构管理)。终止函数作用,进程终止时,释放进程运行相关资源。6、 了解进程在内存中布局情况正文段(代码段)初始化数据段未初始化数据段栈堆size命令可查看各段7、 进程创建函数fork()和vfork()的特点和区别区别:1、fork子进程拷贝父进程的数据段,vfork子进程与父进程共享数据段2、fork父、子进程的执行次序不确定,v

25、fork子进程先运行,父进程后运行8、 编程实现:利用fork()函数,启动子进程,然后父子进程都打印出自己进程的ID。9、 了解什么是僵尸进程和孤儿进程。僵尸进程:一个已经终止,但是其父进程尚未对其进行善后处理的进程孤儿进程:一个父进程退出,而它的一个或多个子进程还在进行,那么那些子进程将成了孤儿进程(孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。僵尸资源会造成资源浪费,孤儿进程则不会)10、 了解守护进程的特点。特点:都是以超级用户(UID为0)的优先级运行;父进程为init进程;没有控制终端11、 进程等待函数wait()和waitpid()的作用

26、和特点。会暂时停止目前进程的执行,直到有信号来到或子进程结束调用wait()成功,会返回已终止子进程的pid;出错时,返回-1。如果没有子进程终止,调用阻塞,直到有一个子进程终止。如果有一个子进程已经终止了,调用会立即返回。wait (int * status) waitpid(pid_t pid,int * status,int options) (等待特定进程)(额外参数可以支持细粒度调整)pid:为欲等待的子进程识别码子进程的结束状态值会由参数 status 返回,而子进程的进程识别码也会一快返回。如果不在意结束状态值,则参数 status 可以设成 NULL。options:子进程的结

27、束状态值12、 了解exec函数族的作用。当进程调用一种exec函数时,该进程完全由新程序替换,而新程序则从其main函数开始执行。因为调用exec并不创建新程序,所以前后的进程ID并未改变。exec只是用另一个新程序替换了当前进程的正文、数据、堆和栈段7、 进程间通信1、 了解进程通信的目的。1、数据传输一个进程需要将它的数据发送给另一个进程2、资源共享多个进程之间共享同样的资源3、通知事件一个进程需要向另一个或一组进程发送消息,通知他们发生了某种事件4、进程控制有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有操作,并能够及时指导它的状态改变

28、2、 进程间通信的几种方法。1、管道(pipe)和有名管道(FIFO)2、信号(signal)3、消息队列4、信号量5、共享内存6、套接字(socket)3、 无名管道和有名管道的区别。管道包括无名管道和有名管道两种,前者用于父进程和子进程间的通信,后者可用于运行于同一个系统中的任意两个进程间的通信4、 编程实现:利用管道进行父子进程通信,父进程发送消息“hello”,子进程打印消息。5、 如何发送一个信号?SIGINT、SIGSTP、SIGCHID、SIGKILL分别代表什么信号?1.用Kill()向进程发信号2.从另一个进程给一个进程发信号3.从键盘给进程发信号SIGINT:来自键盘的中断

29、信号(Ctrl+C)SIGTSTP :用户生成挂起操作符(Ctrl+Z)SIGKILL:该信号结束接收信号的进程SIGCHLD:标识子进程停止或结束的信号6、 信号的处理方式有几种?分别是什么?1、忽略此信号大多数信号都按照这种方式进行处理,但有两种信号却决不能被忽略。他们是:SIGKILL和SIGSTOP,这两种信号不能被忽略的原因是:它们向超级用户提供了一种终止或停止进程的方法2、执行用户希望的动作通知内核在某个信号发生时,捕捉信号,调用一个用户函数在用户函数中,执行用户希望的处理3、执行系统默认动作默认处理,内核对31个信号都已经有了预设7、 编程实现:进程启动后每隔1秒打印一个数字,然

30、后捕获SIGINT和SIGTSTP信号,分别打印对应的捕获信息。8、 了解pause()函数的功能。pause函数使调用进程挂起直到捕捉到一个信号#include <unistd.h>int pause(void)只有执行了一个信号处理函数后,挂起才结束9、 消息队列与管道通信的区别。信号能够传送的信息量有限,管道则只能传送无格式的字节流消息队列就是一个消息的链表。可以把消息看作一个记录,具有特定的格式。进程可以向其中按照一定的规则添加新消息;另外一些进程则可以从消息队列中读走消息持续性:系统V消息队列是随内核持续的,只有在内核重启或者人工删除时,该消息队列才会被删除10、 编程实

31、现两个程序:一个程序创建一个消息队列,然后放入两个类型的消息,另一个程序接收该消息队列,取出类型为2的消息实体并打印出来。11、 理解共享内存通信机制的原理。共享内存是被多个进程共享的一部分物理内存。共享内存是进程间共享数据的一种最快的方法,一个进程向共享内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容实现共享内存分为两个步骤:一、创建共享内存,使用shmget函数二、映射共享内存,将这段创建的共享内存映射到具体的进程空间去,使用shmat函数12、 了解信号量与其他几种通信方式的区别,信号量分类。区别:信号量(又名:信号灯)与其他进程间通信方式不大同,主要用途是保护临界

32、资源。信号量分类:二值信号量:信号灯的值只能取0或1,类似于互斥锁。但两者有不同:信号灯强调共享资源,只要共享资源可用,其他进程同样可以修改信号灯的值;互斥锁更强调进程,占用资源的进程使用完资源后,必须由进程本身来解锁计数信号灯:信号灯的值可以去任意非负值8、 网络通信1、 了解OSI参考模型和TCP/IP参考模型。2、 了解TCP和UDP通信协议的特点。TCP: 可靠传输UDP: 无连接的,不可靠的传输3、 理解字节序转换,为何要进行字节序转换?什么是大端字节序,什么是小端字节序?不同类型的CPU对变量的字节存储顺序可能不同:有的系统是大端字节序,即高位在低地址,即低位在高地址,而有的系统如x86是小端字节序,即低位在低地址,高位在高地址,而网络传输的数据顺序是一定要统一的,所有当内部字节存储顺序和网络字节序(大端字节序)不同时,就一定要进行转换4、 熟悉TCP服务器的搭建过程。创建一个socket绑定IP地址、端口等信息到socket上设置允许的最大连接数等待来自客户端的连接请求收发数据,send()和recv()或者read()和write()关闭网络连接5、 编程实现一个TCP服务器程序,当有客户端连接时,打印信息提示有客户端连接上。6、 循环服务器和并发服务器的特点,如何实现并发服务器?循环服务器一次只能处理一个客户端的请求if(fork(.)=0) 并发服务器并发

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论