首页 > 试题广场 >

若一个用户进程通过read 系统调用读取一个磁盘文件中的数据

[单选题]
若一个用户进程通过read 系统调用读取一个磁盘文件中的数据,则下列关于此过程的叙述中,正确的是( )。

Ⅰ. 若该文件的数据不在内存中,则该进程进入睡眠等待状态
Ⅱ. 请求 read 系统调用会导致 CPU 从用户态切换到核心态
Ⅲ. read 系统调用的参数应包含文件的名称

  • 仅Ⅰ、 Ⅱ
  • 仅Ⅰ、 Ⅲ
  • 仅Ⅱ、 Ⅲ
  • Ⅰ、 Ⅱ和Ⅲ
open 包含文件名 read 包含见描述符handle
发表于 2017-05-25 23:08:35 回复(0)
若文件的数据不在内存中,则进程进入睡眠模式的目的是等待内存对磁盘上文件的映射,因为磁盘的读取比较慢,所以事进入睡眠模式。
read是系统调用,所以CPU从用户态切换到核心态。
open系统调用应该包含文件的名称,read只是包含输入流。
发表于 2016-12-29 14:04:55 回复(0)

read()write()系统调用非常相似。它们都需要三个参数:一个文件描述符fd,一个内存区的地址buf(该缓冲区包含接受的数据或者要传送的数据的存放位置),以及一个数count(指定应该传送多少字节)。两个系统调用都返回所成功传送的字节数,或者发送一个错误条件的信号并返回-1

发表于 2017-10-28 10:54:32 回复(0)
open(fd,buffer,nbytes)
发表于 2021-07-07 21:41:55 回复(0)
    void* buf ;
    int handle;
    int bytes ;
    buf=malloc(10);
 
    handle=open("TEST.$$$",O_RDONLY|O_BINARY,S_IWRITE|S_IREAD);
    if(handle==-1)
    {
        printf("ErrorOpeningFile\n");
        exit(1);
    }
    bytes=read(handle,buf,10);
可以看出open需要传入文件名,而read的参数是文件描述符、句柄对应的文件信息读入到buff中
发表于 2017-05-25 21:55:57 回复(0)
若文件的数据不在内存中,则进程进入睡眠模式的目的是等待内存对磁盘上文件的映射,因为磁盘的读取比较慢,所以事进入睡眠模式。
read是系统调用,所以CPU从用户态切换到核心态。
open系统调用应该包含文件的名称,read只是包含输入流。
发表于 2017-04-20 09:11:35 回复(0)