大连东软信息学院Linux系统编程期末练习题 下载本文

内容发布更新时间 : 2024/5/21 21:46:07星期一 下面是文章的全部内容请认真阅读。

1.下列那个命令不是现实多个环境变量的C

AsetBexportCpwdDenv

2.获取某个环境变量值使用函数A A.getenv B.putenv C.setenv D.unsetenv

1.文件系统保存在磁盘的B A.引导块 B.超级块C.i节点块 D.数据块 2.Linux文件系统的根目录的i节点号为C A. 0 B. 1 C.2 D.3 3.文件描述符的数据类型是B A. char B.int C.doubleD.float 4.设置文件偏移量的系统调用是C A. truncate B. sync C .lseek

D.create

5.下面那个不是lseek第三个参数的取值C A.SEEK_SET B.SEEK_CUR C.SEEK_NOW D.SEEK_END 6.Sync系统调用的功能是A A.刷新所有缓存到磁盘 B.刷新缓存中某个文件的所有信息到磁盘 C.刷新缓存中某个文件的数据到磁盘 D.刷新磁盘中某个文件的属性信息到磁盘 7.Fsync系统调用的功能是B A.刷新所有缓存到磁盘 B.刷新缓存中某个文件的所有信息到磁盘 C.刷新缓存中某个文件的数据到磁盘 D.刷新磁盘中某个文件的属性信息到磁盘 8.Fdata系统调用的功能是C A.刷新所有缓存到磁盘 B.刷新缓存中某个文件的所有信息到磁盘 C.刷新缓存中某个文件的数据到磁盘 D.刷新磁盘中某个文件的属性信息到磁盘

1.可以使用(C)系统调用获得符号链接所引用文件名称 A.link B.symlink C.readlink D.softlink

2.获得工作路径名称的系统调用是A A.getcwd B.getpwuid C.getgrgid D.getlogin 3.通过文件属性中的uid获得文件拥有者名字的系统调用是B A.getcwd B.getpwuid C.getgrgid D.getlogin 4.通过文件属性中的gid获得文件所属组名字的系统调用是C A.getcwd B.getpwuid C.getgrgid D.getlogin 5.根据文件路径来改变文件权限使用系统调用是B A.chown B.chmod C.fchmod D.fchown

一、填空题

1.关于Linux的版本有两种不同的称呼:一种是内核版本,一种是发行版本。

1.Vi的三中工作模式:插入模式、命令模式、末行模式。

2.Gcc生成可执行文件的四个步骤:预处理、编译、汇编、链接。 3.Makefile用来描述程序或工程中各个文件之间的相互联系 4.make。命令用来及时makefile文件中的命令 5.库分为静态库和共享库。

1.命令行参数是main。函数的参数

2.Main函数的参数若有两个参数则第一个参数代表命令行参数个数、第二个参数代表指向各命令行参数字符串的指针数组。

3.Linux 中日期时间的表示方法有:算术类型、结构体类型、字符串类型。 4.使用time函数获得的时间是算术类型、代表自1970年1月1日零时到当前时间的秒数。 5.把算数类型时间表示转换成结构体类型使用()函数localtime。 6.把算数类型时间表示转换成字符串类型使用()函数ctime。

7.Maketime函数把()类型时间表示转换成()类型时间表示结构体、算术。 8.如果一个C程序的入口表示为main(intargc,char *argv[]),编译该程序后的可执行程序为a.out,那么在命令“./a.out–f foo”后,main中的参数argv[1]指向的字符串是(“-f”)。

1.Linux系统下表示标准输入、标准输出和标准错误输出的文件描述符(符号表示)分别为(STDIN_FILENO、STDOUT_FILENO 、STDERR_FILENO),它们的值分别为0、1、2。 2.数字635表示的权限使用字母的方式表示为(rw—wxr-x)、使用符号方式表示为(S_IRUSR | S_IWUSR | S_IWGRP | S_IXGRP | S_IROTH | S_IXOTH)。 3.系统调用open的功能是打开或创建文件。 4.使用open打开文件时有三个标志必须要选择其一,这三个标志是O_RDONLY、O_WRONLY、O_RDWR。

5.文件偏移量代表下一次读或写的位置。 6.将文件偏移量市值为当前偏移处之前的4个字节的维护使用lseek(fd,(-4)(SEEK_CUR),)。 7.设置打开文件标志(O_TRUNC),可以截断文件为0,使用系统调用(truncate)可以截断文件或者加长文件。

8.如果umask设置为022,则创建一个新文件夹(数字表示)的权限为(644)、创建一个新目录的权限为(755)。

9.如果umask设置为024,则创建一个新文件夹(数字表示)的权限为(642)、创建一个新目录的权限为(753)。

1.使用系统调用(umask)可以设置和得到文件模式的屏蔽字。 2.创建硬链接使用系统调用(link),创建符号链接使用系统调用(symlink)。 3.获得工作路径名称的系统调用是(getcwd)。

4.可以使用(stat或fstat或lstat)系统调用显示文件属性信息。

5.chmod,chown,utime都可以修改文件i节点信息,其中chmod的功能是(更改文件权限)、chown的功能是(更改文件所有者和所属组)、utime的功能是(更改文件访问时间和修改时间)。

6.若实现将标准输出重定向到文件描述符为6对应的文件上,则应使用语句(dup2(6,1))。

1.系统调用(Unlink)的作用是删除目录项,这里的目录项是指(文件名和文件i节点的对应关系)。 2.打开目录使用(DIR *opendir(const char *name))系统调用,关闭目录使用(intclosedir(DIR *dir))系统调用,读取目录内容使用(structdirent *readdir(DIR *dir))系统调用。 3.chdir系统调用的功能是(改变当前目录)。

4.创建目录使用(intmkdir(const char *pathname, mode_t mode))系统调用、删除目录使用(intrmdir(const char *pathname))系统调用。

一、简答题

1.关于Linux的版本有两种不同的称呼:

一种是内核版本,一种是发行版本。 2.简述Linux操作系统的特点

3.系统调用、库函数的区别和练习

从用户角度观察,系统调用和库函数都以C函数形式出现,提供给用户一种功能实现的接口,需要用户输入指定的参数,调用结束得到指定的返回值。 从实现者角度观察,库函数是在系统调用上层的函数,库函数一般指程序员可以使用的通用函数。

系统调用由两部分组成:

(1)核心函数:是实现系统调用功能的代码,作为操作系统的核心驻留在内存中,是一种共享代码。运行在核心态。

(2)接口函数:是提供给应用程序的API,以库函数的形式存在于Linux的lib.a中,该库中存放了所有系统调用的接口函数的目标代码,用汇编语言书写。其主要功能是把系统调用号,入口参数地址传给相应的核心函数,并使用户态下运行的应用程序陷入核心态。 4.完成如下命令

(1)新建用户tom 和用户组student #useradd tom #passwd tom

#groupadd student (2)新建文件file

#touch file

(3)将文件file 改名为test,然后将test拷贝到/home

#mv file test #cp test /home

(4)将/home/test文件的拥有着修改为tom,将文件所属组该为student

#chowntom:student /home/test

1.静态库和共享库的区别

(1)静态库的代码在编译时就已连接到开发人员开发的应用程序中。 (2)共享库只是在程序开始运行时才载入,在编译时,只是简单地指定需要使用的库函数。

(3)静态库文件以.a结尾,共享库文件以.so结尾。 2.Makefile文件的显式规则是什么? 目标文件:依赖文件列表

更新目标文件使用的命令

1.Linux文件类型主要有哪七类?

常规文件、目录文件、字符设备文件、块设备文件、管道文件、链接文件、套接字文件 2.简述文件、i节点、文件名、目录之间的关系

每个存在磁盘上的文件都由i节点和数据块两部分组成,i节点和文件一一对应,一个i节点可以对应多个文件名,文件名和i节点的对应关系叫做文件的硬链接,文件名和i节点的对应关系保存在目录文件中。 3.什么是文件描述符?

(1)一个非负整数,内核以此来标识一个特定进程正在操作的文件。

(2)012代表三个标准的文件描述符,分别为标准输入、标准输出、标准错误输出 4.使用符号方式表示rwxrwxrwx权限

S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IWGRP|S_IXGRP|S_IROTH| S_IWOTH|S_IXOTH

5.写出open一下6种打开标志:只读、只写、读写、追加、文件不存在创建、截断为0

O_RDONLY O_WRONLY O_RDWR O_APPEND O_CREAT O_TRUNC 6.读程序,写出执行结果并解释得到该结果的原因 main() { int fd1,fd2; fd1=open(“/etc/passwd”,O_RDONLY); fd2=open(“/etc/passwd”,O_RDWR); printf(“fd1=%d,fd2=%d\\n”,fd1,fd2); close(fd1); close(fd2);

}

结果:fd1=3 fd2=4

原因:open返回的文件描述符为最小可用的非负整数,012是三个标准的文件描述符默认已经被占用,所以第一个open的返回值为3,第二个open返回的是4。

1.回答stat、fstat、latat三个系统调用的区别 stat根据路径获得文件元数据信息

fstat根据文件描述符获得文件元数据信息

前两者如果遇到符号链接文件则会一直引用至非符号链接文件 lstat获得符号链接文件本身的文件元数据信息 2.dup和dup2的区别和联系

联系:dup与dup2都用来将新文件描述符指向原来文件描述符指向的打开文件描述。 区别:dup返回的新文件描述符为最小可用的文件描述符,dup2返回的新文件描述符可以通过第二个参数指定。

3.硬链接和符号链接的区别 (1)命令

ln原文件硬链接文件(不能对目录创建硬链接) ln –s 原文件/目录符号链接文件

(2)是否新增文件:硬链接不增文件,符号链接增加文件。 (3)删除原文件/目录

硬链接:对应i节点链接数-1。 符号链接:符号链接文件失效。 (4)删除链接文件

删除硬链接文件,使对应i节点的链接数-1。 删除符号链接文件,对原文件/目录无任何影响

(5)是否跨文件系统:硬链接不可以,符号链接可以

1.fork与vfork区别?

(1)fork创建的子进程复制父进程的整个地址空间,vfork不创建这一副本,子进程借用父进程的地址空间,直到其调用exec族函数或终止;

(2)fork创建的子进程和父进程相互独立地运行,而vfork创建子进程后挂起父进程,直到子进程终止或调用exec族函数。

2.阅读以下代码,若execlp调用成功的话,“Done!”会打印输出吗?为什么? #include int main() { printf(“Running ps with execlp\\n”); execlp(“ps”,”ps”,”-af”,0); printf(“Done!\\n”); exit(0); }

不会输出“Done!”。 原因:

执行execlp(“ps”,”ps”,”-af”,0)调用成功后,当前进程的地址空间被新的程序ps所替代,将执行“ps -af”

1.试写出下列程序段的运行结果,并解释原因 int x=0,int y=0; void thread1(void) { printf(“This is pthread1.the sentence 1\\n”); y=7; sleep(1); printf(“This is pthread1.the sentence 2\\n”); x=x+y; }

void thread2(void) {