华为内部面试题库(13)

1.低速系统调用是可能会使进程永远阻塞的一类系统调用,包括下列哪些调用(多选):(参考:UNIX环境高级编程,第2版,第14章,高级I/O14.2小节)
A.
如果某些文件类型(例如管道、终端设备和网络设备)的数据并不存在,则读操作可能会使调用者永远阻塞
B.
如果数据不能立即被上述同样类型的文件接受(由于在管道中无空间、网络流控制等),则写操作也会使调用者永远堵塞
C.
在某些条件发生之前,打开某些类型的文件会被足赛
D.
对已经加上强制性记录锁的文件进行读、写
E.
某些ioctl操作

答案:ABCDE
试题解析

系统调用分成低速系统调用和其他系统调用两类。低速系统调用是可能会使进程永远阻塞的一类系统调用,它们包括下列调用:
A.如果某些文件类型(例如管道、终端设备和网络设备)的数据并不存在,则读操作可能会使调用者永远阻塞
B.如果数据不能立即被上述同样类型的文件接受(由于在管道中无空间、网络流控制等),则写操作也会使调用者永远堵塞
C.在某些条件发生之前,打开某些类型的文件会被足赛
D.对已经加上强制性记录锁的文件进行读、写
E.某些ioctl操作
F.某些进程间通信函数

 

2.关于记录锁的说法错误的是(单选):(参考:UNIX环境高级编程,第2版,第14章,高级I/O14.3小节)
A.
记录锁的功能是:当一个进程正在读或修改文件的某个部分时,它可以阻止其它进程修改同一文件区
B.fcntl
记录锁支持共享读锁和独占性写锁
C.
如果一个进程已经控制了文件中的一个加锁区域,然后它又试图对另一个进程控制的区域枷锁,则它就会休眠,这种情况下,有发生死锁的可能性
D.
记录锁的三条规则,其中一条是:由fork产生的子进程继承父进程所设置的锁

答案:D
试题解析

记录锁的自动继承和释放有三条规则:
1)锁与进程和文件两方面有关。这有两重含义:第一重很明显,当一个进程终止时,它所建立的锁全部释放;第二重意思就不很明显,任何时候关闭一个描述符时,则该进程通过这一描述符可以引用的文件上的任何一把锁都释放
2)由fork产生的子进程不继承父进程设置的锁。这意味着,若一个进程得到一把锁,然后调用fork,那么对于父进程获得的锁而言,子进程被视为另一个进程,对于从父进程处继承过来的任一描述符,子进程需要调用fcntl才能获得它自己的锁
3)在执行exec后,新程序可以继承原执行程序的锁。

 

3.select函数使我们可以执行I/O多路转接,下列说法错误的是(单选):(参考:UNIX环境高级编程,第2版,第14章,高级I/O14.5小节)
A.select
函数的最后一个参数指定了愿意等待的时间,有三种情况:永远等待,完全不等待,指定等待的时间
B.select
也有三个可能的返回值:-1表示出错,0表示没有描述符准备好,正值表示已经准备好的描述符数
C.
如果在一个描述符上碰到了文件结尾处,则select认为该描述符是可读的
D.
当到达文件结尾处时,select会指示一个异常状态

答案:D
试题解析

如果在一个描述符上碰到了文件结尾处,则select认为该描述符是可读的。然后调用read,它返回0,这是UNIX系统指示到文件结尾处的方法。很多人错误的认为,当到达文件结尾处时,select会指示一个异常状态

 

4.管道、FIFO、以及某些设备,特别是终端、网络和STREAMS设备有下列两种性质:(多选):(参考:UNIX环境高级编程,第2版,第14章,高级I/O14.8小节)
A.
一次read操作所返回的数据可能少于所要求的数据,即使还没达到文件尾端也可能是这样。这不是一个错误,应当继续该设备
B.
一次read操作所返回的数据不可能少于所要求的数据,即使还没达到文件尾端也可能是这样,否则就是一个错误
C.
一次write操作的返回值也可能少于指定输出的字节数。
D.
一次write操作的返回值不可能少于指定输出的字节数,否则就是一个错误

答案:AC
试题解析

关于readnwriten函数,管道、FIFO、以及某些设备,特别是终端、网络和STREAMS设备有下列两种性质:
(1)一次read操作所返回的数据可能少于所要求的数据,即使还没达到文件尾端也可能是这样。这不是一个错误,应当继续该设备
(2)一次write操作的返回值也可能少于指定输出的字节数.这可能是由若干因素造成的,例如,下游模块的流量控制限制。这也不是错误,应当继续写余下的数据至该设备。(通常,只有对非阻塞描述符,或捕获到一个信号时,才发生这种write的中途返回)
在读写磁盘文件时从未见到过这种情况,除非文件系统用完了空间,或者我们接近了配额限制,而不能将要求写的数据全部写出

 

5.关于I/O,说法错误的是:(单选):(参考:UNIX环境高级编程,第2版,第14章,高级I/O14.6 14.9小节)
A.
异步I/O的一个限制是每个进程只有一个信号
B.
如果要对几个描述符进行异步I/O,那么在进程接收到该信号时并不知道这一信号对应于哪一个描述符
C.
如果考虑到时钟时间,那么mmapmencpy方式较readwrite方式慢
D.
存储映射I/O使一个磁盘文件与存储空间中的一个缓冲区相映射

答案:C
试题解析

如果考虑到时钟时间,那么mmapmencpy方式较readwrite方式快。因为使用mmapmencpy时做的工作要少。用readwrite时,要先将数据从内核缓冲区复制到应用程序缓冲区(read),然后又将应用程序缓冲区中的数据复制到内核缓冲区(write)。用mmapmemcpy时,则直接将映射到应用程序地址空间的一个内核缓冲区中的数据复制到另一个同样映射到应用程序地址空间中的内核缓冲区中

原文地址:https://www.cnblogs.com/wangfengju/p/6173045.html