45习题答案.docx
- 文档编号:30229351
- 上传时间:2023-08-07
- 格式:DOCX
- 页数:17
- 大小:20.42KB
45习题答案.docx
《45习题答案.docx》由会员分享,可在线阅读,更多相关《45习题答案.docx(17页珍藏版)》请在冰豆网上搜索。
45习题答案
一、选择
1.文件系统保存在磁盘的(B)
A引导块B超级块Ci节点块D数据块
2.linux文件系统的根目录的i节点号为(C)
A0B1C2D3
3.文件描述符的数据类型为(B)
AcharBintCdoubleDfloat
4.设置文件偏移量的系统调用是(C)
AtruncateBsyncClseekDcreat
5.下面哪个不是lseek第三个参数的取值(C)
ASEEK_SETBSEEK_CURCSEEK_NOWDSEEK_END
6.sync系统调用的功能是(A)
A刷新所有缓存到磁盘B刷新缓存中某个文件的所有信息到磁盘
C刷新缓存中某个文件的数据到磁盘D刷新缓存中某个文件的属性信息到磁盘
7.fsync系统调用的功能是(B)
A刷新所有缓存到磁盘B刷新缓存中某个文件的所有信息到磁盘
C刷新缓存中某个文件的数据到磁盘D刷新缓存中某个文件的属性信息到磁盘
8.fdatasync系统调用的功能是(C)
A刷新所有缓存到磁盘B刷新缓存中某个文件的所有信息到磁盘
C刷新缓存中某个文件的数据到磁盘D刷新缓存中某个文件的属性信息到磁盘
9.可以使用(C)系统调用获得符号链接所引用文件名称。
AlinkBsymlinkCreadlinkDsoftlink
10.获得工作路径名称的系统调用是(A)
AgetcwdBgetpwuidCgetgrgidDgetlogin
11.通过文件属性中的uid获得文件拥有者名字的系统调用是(B)
AgetcwdBgetpwuidCgetgrgidDgetlogin
12.通过文件属性中的gid获得文件所属组名的系统调用是(C)
AgetcwdBgetpwuidCgetgrgidDgetlogin
13.根据文件路径来改变文件权限使用系统调用(B)
AchownBchmodCfchmodDfchown
二、填空
1.磁盘被看作是由__块___构成的,它的大小是扇区的倍数,扇区的大小一般是_____512字节__。
2.每块物理磁盘可以被分成片,每片可以被称作___卷_____或____分区_________。
每片对应一个特殊文件,特殊文件名由设备名构成,如“hd*n”或“sd*n”,其后跟随数字和字母,如/dev/hda5代表的设备为_____第一块物理磁盘的第5个分区________。
3.statvfs系统调用可以获得____文件系统____信息,该信息保存在磁盘的____超级块_中。
4.文件系统的安装是指___将一个文件系统连接到一个已经存在的文件系统上____,可使用系统调用___mount_实现;卸载是指___将两个文件系统的连接断开___,可使用系统调用__umount__实现。
5.Linux系统下,表示标准输入、标准输出和标准错误输出的文件描述符(符号表示)为_STDIN_FILENO_、___STDOUT_FILENO__和__STDERR_FILENO__,它们的值分别为____0_____、_____1______、_____2______。
6.文件描述符是对___进程打开文件表____的索引,进程表中的每个记录项指向一个__打开文件描述___,打开文件描述最终会找到__复制到内存中的文件的i节点___。
7.数字635表示的权限使用字母方式表示为__rw—wxr-x__,使用符号方式表示为_S_IRUSR|S_IWUSR|S_IWGRP|S_IXGRP|S_IROTH|S_IXOTH___。
8.系统调用open的功能是___打开或创建文件_____。
9.使用open打开文件时有三个标志必须要选择其一,这三个标志是___O_RDONLY___、_____O_WRONLY__、___O_RDWR_____。
10.O_EXCL与O_CREAT合用表示__文件不存在则创建,否则失败___。
11.文件偏移量代表_____下一次读或写的位置_________。
12.将文件偏移量设置为当前偏移处之前的4个字节的位置,使用lseek(fd,__-4___,__SEEK_CUR___)。
13.设置打开文件标志__O_TRUNC__可以截短文件为0,使用系统调用___truncate___可以截短或加长文件。
14.如果umask设为022,则创建一个新文件的权限(数字表示)为__644____,创建一个新目录的权限(数字表示)为____755_____。
15.如果umask设为024,则创建一个新文件的权限(数字表示)为___642_____,创建一个新目录的权限(数字表示)为__753_______。
16.使用系统调用___umask____可以设置和得到文件模式的屏蔽字。
17.系统调用___unlink___的作用是删除目录项,这里的目录项是指___文件名和文件i节点的对应关系____。
18.创建硬链接使用系统调用___link___,创建符号链接使用系统调用__symlink_。
19.获得工作路径名称的系统调用是___getcwd_____。
20.可以使用____stat或fstat或lstat__系统调用显示文件属性信息。
21.chmod、chown、utime都可以修改文件i节点的信息,其中chmode的功能是__更改文件权限__,chown的功能是__更改文件所有者和所属组___,utime的功能是__更改文件访问时间和修改时间_。
22.打开目录使用___opendir___系统调用,关闭目录使用____closedir___系统调用,读取目录内容使用__readdir___系统调用。
23.chdir系统调用的功能是_____改变当前目录______。
24.创建目录使用____mkdir__系统调用,删除目录使用_____rmdir____系统调用。
25.若实现将标准输出重定向到文件描述符为6对应的文件上,则应使用语句__dup2(6,1)_____。
三、判断并解释原因
1.一个文件的硬链接中,第一个创建的硬链接与其他硬链接相比总是最后一个被删除
(错)硬链接之间平等
2.可以对普通文件和目录文件创建硬链接和符号链接。
(错)对目录不可以创建硬链接
3.给一个文件创建硬链接时,如果新的链接文件已经存在,则覆盖之。
(错)返回错误
4.一个符号链接不能再引用另一个符号链接。
(错)可以
5.lstat系统调用可以获得某符号链接所引用的文件的i节点信息。
(错)返回符号链接文件本身的i节点信息
6.父进程打开文件返回文件描述符后创建的子进程共享父进程的文件描述符
(对)
7.对于一个已经打开的文件来说,读和写的位置使用不同的偏移量
(错)文件偏移量代表下一次读或写的位置
8.多个进程打开同一个文件,这几个进程共用读写偏移量
(错)每个进程的每次open都会得到一个打开文件描述,文件描述中保存文件偏移量,不同进程的open得到的是不同的打开文件描述,因此不同
9.父进程打开一个文件后创建的子进程与父进程共用读写偏移量
(对)
四、简答
1.简述文件、i节点、文件名、目录之间的关系。
答:
每个存在磁盘上的文件都由i节点和数据块两部分组成,i节点和文件一一对应,一个i节点可以对应多个文件名,文件名和i节点的对应关系叫做文件的硬链接,文件名和i节点的对应关系保存在目录文件中。
2.回答stat、fstat、lstat三个系统调用的区别。
答:
stat根据路径获得文件元数据信息
fstat根据文件描述符获得文件元数据信息
前两者如果遇到符号链接文件则会一直引用至非符号链接文件
lstat获得符号链接文件本身的文件元数据信息
3.使用什么方式来判断一个文件是什么类型的?
使用什么方式来判断文件的权限?
答:
首先使用stat获得文件属性结构体为structstat,其中的成员变量st_mode代表了文件类型及权限。
st_mode共16位,12-15位代表文件类型,可根据这四位进行判断文件类型。
0-8位代表三类用户的九种权限,可根据这9位进行判断文件的权限。
4.dup和dup2的区别和联系?
答:
联系:
dup与dup2都用来将新文件描述符指向原来文件描述符指向的打开文件描述。
区别:
dup返回的新文件描述符为最小可用的文件描述符,dup2返回的新文件描述符可以通过第二个参数指定。
5.什么是文件描述符?
答:
(1)一个非负整数,内核以此来标识一个特定进程正在操作的文件。
(2)012代表三个标准的文件描述符,分别为标准输入、标准输出、标准错误输出
6.使用符号方式表示rwxrwxrwx权限。
答:
S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IWGRP|S_IXGRP|S_IROTH|S_IWOTH|S_IXOTH
7.写出open的以下6种打开标志:
只读、只写、读写、追加、文件不存在创建、截短为0。
O_RDONLYO_WRONLYO_RDWRO_APPENDO_CREATO_TRUNC
8.硬链接和符号链接的区别.
(1)命令
ln原文件硬链接文件(不能对目录创建硬链接)
ln–s原文件/目录符号链接文件
(2)是否新增文件:
硬链接不增文件,符号链接增加文件。
(3)删除原文件/目录
硬链接:
对应i节点链接数-1。
符号链接:
符号链接文件失效。
(4)删除链接文件
删除硬链接文件,使对应i节点的链接数-1。
删除符号链接文件,对原文件/目录无任何影响
(5)是否跨文件系统:
硬链接不可以,符号链接可以
五、读程序写结果
1.读程序,写出执行结果,并解释得到该结果的原因。
main()
{
intfd1,fd2;
fd1=open(“/etc/passwd”,O_RDONLY);
fd2=open(“/etc/passwd”,O_RDWR);
printf(“fd1=%dfd2=%d\n”,fd1,fd2);
close(fd);
close(fd2);
}
结果:
fd1=3fd2=4
原因:
open返回的文件描述符为最小可用的非负整数,012是三个标准的文件描述符默认已经被占用,所以第一个open的返回值为3,第二个open返回的是4。
2.读程序,写出执行结果,并解释得到该结果的原因。
#include
#include
main()
{
intfd;
fd=open("/etc/passwd,O_RDONLY);
if(fork()!
=0)
{
wait();
printf("fdinparent%d\n",fd);
}
else
{
printf("fdinchild%d\n",fd);
}
}
结果:
fdinchild3
fdinparent3
原因:
(1)父进程打开文件返回的文件描述符为3,子进程拷贝父进程空间,所以fd值也为3。
(2)由于父进程要执行的if分支中有wait函数,所以等子进程结束后父进程才继续执行。
3.读程序,写出执行结果,并解释得到该结果的原因。
#include
#include
main()
{
intfd,pos;
fd=open("f1",O_RDWR|O_CREAT|O_TRUNC,S_IRUSR|S_IWUSR);
charf[10];
charz[10]={"123456789"};
if(fork()!
=0)
{wait(NULL);
printf("fdinp%d\n",fd);
read(fd,f,5);
write(1,f,5);
printf("\n");
}
else
{
printf("fdinc%d\n",fd);
write(fd,z,sizeof(z)-1);
pos=lseek(fd,0,SEEK_SET);
printf(“pos=%d\n”,pos);
}
}
结果:
fdinc3
pos=0
fdinp3
12345
原因:
(1)子进程拷贝父进程空间,所以子进程中fd也为3。
(2)子进程与父进程共用文件偏移量,所以子进程写完10个字符后,又调用lseek系统调用使得偏移量又为0,所以父进程从0偏移量处读取前5个字符。
(3)1为标准输出,所以write(1,f,5)会将f中的前5个字符打印在屏幕上,而f中恰是刚刚从0偏移量处读出的5个字符。
五、编程
1.向文件f1中写入“helloworld!
”,然后再将f1中的内容读出并显示在屏幕上。
(注意必要的错误判断)
#include
#include
#include
intmain()
{
intfd;
charbuf1[13]={"helloworld!
"};
charbuf2[12];
intnum;
fd=open("f1",O_RDWR|O_CREAT|O_TRUNC,0644);
if(fd==-1)
{
perror("f1notopen");
exit
(1);
}
num=write(fd,buf1,sizeof(buf1)-1);
if(num!
=(sizeof(buf1)-1))
printf("writelessthanwant\n");
lseek(fd,0,SEEK_SET);
num=read(fd,buf2,12);
if(num!
=12)
printf("readlessthan12\n");
write(1,buf2,12);
close(fd);
}
2.向文件f2中写入“aabbccddee”,然后将偏移量移到绝对偏移为4的位置处,读6个字符,并将结果显示在屏幕上。
#include
#include
#include
intmain()
{
intfd;
charbuf1[11]={"aabbccddee"};
charbuf2[10];
intnum;
fd=open("f2",O_RDWR|O_CREAT|O_TRUNC,0644);
if(fd==-1)
{
perror("f2notopen");
exit
(1);
}
num=write(fd,buf1,sizeof(buf1)-1);
if(num!
=(sizeof(buf1)-1))
printf("writelessthanwant\n");
lseek(fd,4,SEEK_SET);
num=read(fd,buf2,6);
if(num!
=6)
printf("readlessthan6\n");
write(1,buf2,6);
close(fd);
}
3.向文件f3中写入“aabbccddeeffgghh”,然后将文件截短至8个字节,然后将截短后的文件内容读出并显示在屏幕上。
#include
#include
#include
intmain()
{
intfd;
charbuf1[17]={"aabbccddeeffgghh"};
charbuf2[8];
intnum;
fd=open("f3",O_RDWR|O_CREAT|O_TRUNC,0644);
if(fd==-1)
{
perror("f3notopen");
exit
(1);
}
num=write(fd,buf1,sizeof(buf1)-1);
if(num!
=(sizeof(buf1)-1))
printf("writelessthanwant\n");
lseek(fd,0,SEEK_SET);
ftruncate(fd,8);
num=read(fd,buf2,8);
if(num!
=8)
printf("readlessthan8\n");
write(1,buf2,8);
close(fd);
}
4.在程序中将umask改至044,创建文件f4。
#include
#include
#include
intmain()
{
intfd;
umask(044);
creat("f4",S_IRUSR|S_IWUSR);
}
5.实现“cat文件名”显示文件内容。
#include
main(intargc,char*argv[])
{
intfd;
intnum;
charbuf[10];
if(argc!
=2)
{
printf("missfilename\n");
exit
(1);
}
fd=open(argv[1],O_RDONLY);
if(fd==-1)
{
perror("erroropen");
exit
(1);
}
while((num=read(fd,buf,10))!
=0)
write(1,buf,num);
close(fd);
}
6.实现“cp原文件目标文件”
#include
#include
main(intargc,char*argv[])
{
intfrom,to;
intnum;
charbuf[10];
if(argc!
=3)
{
printf("argumenterror\n");
exit
(1);
}
from=open(argv[1],O_RDONLY);
if(from==-1)
{
perror("erroropenfrom");
exit
(1);
}
to=open(argv[2],O_WRONLY|O_CREAT|O_TRUNC,0644);
if(to==-1)
{
perror("erroropento");
exit
(1);
}
num=read(from,buf,10);
while(num!
=0)
{
write(to,buf,num);
num=read(from,buf,10);
}
close(from);
close(to);
}
7.编程实现:
命令行参数有2个,如果参数为a,则显示“aaaaa”,如果参数为b的话,则显示“bbbbb”,否则显示“other”。
main(intargc,char**argv)
{
if(argc==2)
{
if((strcmp(argv[1],"a")==0))
printf("aaaaaaaaaaaaaaa\n");
elseif((strcmp(argv[1],"b")==0))
printf("bbbbbbbbbbbbbbb\n");
else
printf("other\n");
}
}
8.编写程序pro3.c,将字符串“helloworld”通过输出重定向方式写入文件f1中。
#include
#include
#include
#include
#include
main()
{
intfd;
if((fd=open("f1",O_WRONLY|O_CREAT,0644))==-1)
perror("openfail");
if(dup2(fd,1)==-1)
perror("Redirectfailed");
printf("Helloworld\n");
close(fd);
}
以下答案略
(在编程程序过程中功能相似的几个程序尽量整合成为一个独立的程序,如1-5做好后最终形成一个实现ls命令功能的独立的程序)
9.实现“ll文件名”功能
10.实现“ls-l文件名”功能。
11.实现“ls”功能
12.实现“ls-i”功能
13.实现“ls目录”功能
14.实现“ls-l”功能
15.实现“cd目录”功能
16.实现“cd”功能(cd后不加参数)
17.实现“cp文件目录”的功能。
18.实现“cp目录目录”功能,不必处理符号链接、硬链接(可以直接复制完成),不用保持所有权、权限位、时间。
19.实现“cp目录目录”功能,保持所有权、权限位、时间。
20.实现“cp目录目录”功能,保持符号链接、硬链接。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 45 习题 答案
![提示](https://static.bdocx.com/images/bang_tan.gif)