linux选择填空

选择

文件系统

  1. (单选题)linux文件系统通常由四部分组成:引导块,超级块,索引节点和 ()。

    A. 文件块
    B. 数据块
    C. 索引块
    D. 目录块

    正确答案: B

  2. (单选题)任何进程在运行时默认打开的三个流对象,都有相应的文件描述符,标准文件描述符定义标准输入设备的值为 。

    A. 0
    B. 1
    C. 2
    D. 3

    正确答案: A

  3. (单选题)
    系统调用的函数原型int open(const char *pathname, int flags),flag值中( )表示以读写的方式打开文件。

    A. O_RDONLY
    B. O_WRONLY
    C. O_RDWR
    D. O_APPEND

    正确答案: C

  4. (单选题)系统调用的函数原型int open(const char *pathname, int flags),flag值中( )表示若文件存在且为只读或只写成功打开,则将长度截为0。

    A. O_APPEND
    B. O_TRUNC
    C. O_CREAT
    D. O_EXCL

    正确答案: B

  5. (单选题)此行代码length=lseek(fd,0,SEEK_END);中的length的值表示( )。

    #include<stdio.h>
    #include<stdlib.h>
    #include<fcntl.h>
    #include<unistd.h>
    #include<string.h>
    int main(){
    	int fd,length;
    	fd=open("lseek.txt",O_RDWR);
    	length=lseek(fd,0,SEEK_END);
    	printf("the length os lseek is %d\n",length);
    	close(fd);
    	return 0;
    }
    

    A. 文件lseek.txt的大小
    B. 调整lseek.txt指针位置到文件的开头
    C. 调整lseek.txt指针位置到文件的中间
    D. 调整lseek.txt指针位置到文件的第二个字节

    正确答案: A

  6. (单选题)使用下列函数调用int fcntl(int fd, int cmd);来实现文件描述符的复制,cmd参数应使用哪一个?

    A. F_DUPFD
    B. FD_CLOEXEC
    C. F_GETFD
    D. F_SETFD

    正确答案: A

  7. (单选题)阅读程序填空:如果想要获取文件的大小,空白处应该填写以下哪个答案。

    #include<stdio.h>
    #include<unistd.h>
    #include<sys/stat.h>
    int main(int argc, char *argv[]){
    	struct stat statBuf;
    	if(stat(argv[1],&statBuf)<0){
    		perror("stat");
    	}
    	else{
    		printf("the size of file is %ld",     );
    	}
    	return 0;
    }
    

    A. statBuf.st_size
    B. statBuf.st_ino
    C. statBuf.st_ctime
    D. statBuf.st_atime

    正确答案:A

  8. (单选题)在创建文件和目录时候,有默认权限。如果umask值为0022,则文件的默认权限为( ) 。

    A. 0666
    B. 0644
    C. 0777
    D. 0755

    正确答案: B

  9. (单选题)执行程序,代码输出结果为( )。

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <fcntl.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    int main (void){
        int fd;    
        if((fd=open("tempfile",O_WRONLY|O_CREAT|O_TRUNC,0700))< 0){
            perror("open");
            exit(1);
        }
        if((link("tempfile","hardlink"))==-1){
            perror("open");
            exit(1);
        }
        struct stat statBuf;
        fstat(fd, &statBuf);
        printf("link num:%ld\n", statBuf.st_nlink);
        sleep(3);
        if(unlink("tempfile") < 0){
            perror("unlink");
            exit(1);
        }
        fstat(fd, &statBuf);
        printf("unlink ,num:%ld\n", statBuf.st_nlink);
     	return 0;
    }
    

    A.
    link num:2
    unlink ,num:1
    B.
    link num:2
    unlink ,num:2
    C
    link num:3
    unlink ,num:2
    D.
    link num:1
    unlink ,num:1

    正确答案: A

  10. (单选题)获取目录的系统调用函数为 ( )。

    A. chdir()
    B. getcwd()
    C. opendir
    D. closedir

    正确答案:B

进程

  1. (单选题)一个进程是 ( )。

    A. 处理机一次或多次执行的一个程序。
    B. 一个独立的程序 +数据集。
    C. PCB 结构与程序和数据的组合。
    D. 一个独立的程序。

    正确答案: C

  2. (单选题)一个进程调用 wait 或 waitpid 函数,可能产生 3 中情况,下列不属于这 3 种情况的是 ( )。

    A. 如果所有子进程都还在运行,进程挂起。
    B. 如果恰有子进程结束,它的终止状态字正等待父进程提取,立即得到该
    终止状态字并返回,其返回值为该子进程的进程号。
    C. waitpid,如果该进程没有子进程,参3指定了WNOHANG,返回0。
    D. 如果该进程没有子进程,立即返回,返回值为 0。

    正确答案: D

  3. (单选题)返回调用进程的进程标识号的系统函数是 ( )。

    A. getpid
    B. getpgrp
    C. getppid
    D. setpid

    正确答案: A

  4. (单选题)程序和进程是两个不同的概念,以下不能描述这个观点的是( )。

    A. 程序指出了处理器执行操作的步骤,而进程是一个程序在一个数据集合上
    的一次执行。
    B. 同一个程序运行 10 次,产生的是同一个进程。
    C. 进程是动态的,是程序的执行过程。
    D. 多个不同的进程可以包含相同的程序。

    正确答案: B

  5. (单选题)Fork 函数在父进程中的返回值是 ( )。

    A. 创建的子进程的进程标识号
    B. 0
    C. -1
    D. 1

    正确答案: A

  6. (单选题)在 Linux 中,下列不属于正常结束进程的方法是( )。

    A. 在 main 函数中调用 return 。
    B. 调用 exit 函数 。
    C. 调用_exit 函数 。
    D.调用 abort函数。

    正确答案: D

  7. (单选题)以下程序的输出结果是( )

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
    #include <pthread.h>
    int main(int argc, char *argv[]){
        printf("===================start of file\n");  
        pid_t pid = fork();            
        if (pid == -1) {
            perror("fork error");
            exit(1);
        } else if (pid == 0) {       
            printf("---child,my pid is %d,my parent pid is %d\n",getpid(),getppid());
        } else if (pid > 0) {           
            printf("---parent my child is %d,my pid is %d,myparent pid is %d\n", pid,getpid(),getppid());
     sleep(1);
        }
        printf("===================end of file\n");  
        return 0;
    }
    

    A
    ===================start of file
    —parent my child is 4759,my pid is 4758,myparent pid is 3700
    —child,my pid is 4759,my parent pid is 4758
    ===================end of file
    B.
    ===================start of file
    —parent my child is 4759,my pid is 4758,myparent pid is 3700
    —child,my pid is 4759,my parent pid is 4758
    ===================end of file
    ===================end of file
    C.
    ===================start of file
    —parent my child is 4759,my pid is 4758,myparent pid is 3700
    —child,my pid is 4759,my parent pid is 4758
    ===================end of file
    ===================end of file
    ===================end of file
    D.
    ===================start of file
    ===================start of file
    —parent my child is 4759,my pid is 4758,myparent pid is 3700
    —child,my pid is 4759,my parent pid is 4758
    ===================end of file
    ===================end of file

    正确答案: B

  8. (单选题)以下程序输出结果是( )

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    int var = 100;      
    int main(void){
        pid_t pid;
        pid = fork(); 
        if (pid == -1) {
            perror("fork error");
            exit(1);
        } else if (pid > 0) {      
            var = 288;              
             printf("parent, var = %d\n", var);
     sleep(1);
        } else if (pid == 0) {
            printf("child, var = %d\n", var);       
        }
        printf("------------finish---------------\n");
        return 0;
    }
    

    A.
    parent, var = 288
    child, var = 100
    ------------finish---------------
    B.
    parent, var = 288
    child, var =288
    ------------finish---------------
    ------------finish---------------
    C.
    parent, var = 288
    child, var = 100
    ------------finish---------------
    ------------finish---------------
    D.
    parent, var = 288
    child, var = 288
    ------------finish---------------
    ------------finish---------------

    正确答案: C

  9. (单选题)以下程序输出结果是( )

    int var = 100;
    int main(void){
        int *p;
        pid_t pid;
        int fd;
        fd = open("temp", O_RDWR|O_CREAT|O_TRUNC, 0644);
        if(fd < 0){
            perror("open error");
            exit(1);
        }
        ftruncate(fd, 4);  
        p = (int *)mmap(NULL, 4, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd, 0);
        if(p == MAP_FAILED){ 
            perror("mmap error");
            exit(1);
        }
        close(fd); 
        pid = fork(); 
        if(pid == 0){
            *p = 7000;               
            var = 1000;
            printf("child, *p = %d, var = %d\n", *p, var);
        } else {
            sleep(1);
            printf("parent, *p = %d, var = %d\n", *p, var);     
            wait(NULL);
            int ret = munmap(p, 4); 
            if (ret == -1) {
                perror("munmap error");
                exit(1);
            }
        }
        return 0;
    }
    

    A.
    child, *p = 7000, var = 1000
    parent, *p = 0, var = 100
    B.
    child, *p = 7000, var = 1000
    parent, *p = 7000, var = 100
    C.
    child, *p = 7000, var = 1000
    parent, *p = 7000, var = 1000
    D.
    child, *p = 7000, var = 1000
    parent, *p = 0, var = 1000

    正确答案: A

  10. (多选题)哪种进程之间的通信,数据不可以重复读( )

    A. 共享内存映射进程间通信
    B. fifo
    C. 管道
    D. 文件

    正确答案:BC

线程

  1. 下述是Linux下多线程编程常用的pthread库提供的函数名和意义,说法不正确的是:

    A.pthread_create 创建一个线程
    B.pthread_join用来等待一个线程的结束
    C.pthread_mutex_init 初始化一个线程互斥锁
    D.pthread_exit杀死一个线程

    正确答案: D

  2. 对线程函数来说,说法正确的是:

    A、pthread_create中参数arg是传递给start_routine函数的参数
    B、pthread_join函数用于结束线程,其参数是线程的返回值
    C、 pthread_exit函数用于退出另一个线程,参数是另一个线程的ID
    D、pthread_cancel函数用于取消当前线程的执行,即退出本线程

    正确答案:A

  3. 对互斥锁及条件变量说法不正确的是:

    A、互斥锁保证让每个线程对共享资源按顺序进行原子操作
    B、条件变量是让线程睡眠,在符合某种条件时唤醒睡眠的线程
    C、条件变量可以让多个线程在某一时间上保持同步
    D、在使用条件变量时,互斥锁会失去作用,所以是否有互斥锁关系不重要

    正确答案:D

  4. 以下说明正确的是:

    A、进程和线程都可以由CPU直接执行的指令流,所以进程和线程没有区别
    B、线程是一个独立的指令流,是在进程中被创建的,随进程的关闭而关闭
    C、进程和线程都是一个程序,是执行程序的过程,拥有完整的资源,都有自己的数据段、代码段等
    D、一个回调函数就是一个线程,所以多线程必须有多个回调函数实现

    正确答案: B

  5. 线程A SendMessage给线程B,线程B处理该消息时又SendMessage给线程A,会出现:

    A、死锁
    B、继承执行
    C、线程A停止响应
    D、线程B停止响应

    正确答案: B

填空

文件

  1. 获取目录的系统调用函数为 ( getcwd()
  2. 函数调用int fcntl(int fd, int cmd);来实现文件描述符的复制,cmd参数应使用(F_DUPFD)
  3. 命令行由(shell)函数提供
  4. 文件描述符的数据类型( int )
  5. Linux下获取文件属性函数:( stat())
  6. 在创建文件和目录时候,有默认权限。
    • 如果umask值为0022,则文件的默认权限为(0644)目录的默认权限为(0755)
  7. linux中把分区和目录对应的过程叫做(挂载
  8. gcc编译四个阶段:(预处理、编译、汇编和链接)
  9. Linux操作系统内核由(c语言和汇编语言)编写完成。
  10. 目录(/boot)下存放linux操作系统启动时所要用到的程序
  11. Linux 系统的设备文件分为三类?(字符设备文件、块设备文件和网络设备文件)
  12. vim三种模式:在命令模式下按下(:(英文冒号))就进入了底线命令模式。
  13. Vim的三种模式:(命令模式 插入模式 底行模式)
  14. 标准I/O提供了三种类型的缓冲,分别是 (全缓冲 行缓冲 不带缓冲)
  15. 文件系统四部分 (引导块,超级块,索引节点,数据区) (超级块)用于存放文件的控制信息。
  16. (fcntl)系统调用可以根据文件描述符来操作文件特性。
  17. Valgrind包括很多工具,(Memcheck)是valgrind应用最广泛的工具,一个重量级的内存检查器,能够发现开发中绝大多数内存错误使用情况,(Cachegrind)是主要用来检查程序中缓存使用出现的问题。
    Memcheck ------> 这是valgrind应用最广泛的工具,一个重量级的内存检查器,能够发现开发中绝大多数内存错误使用情况
    Callgrind ------> 它主要用来检查程序中函数调用过程中出现的问题。
    Cachegrind ------> 它主要用来检查程序中缓存使用出现的问题。
    Helgrind ------> 它主要用来检查多线程程序中出现的竞争问题。
    Massif ------> 它主要用来检查程序中堆栈使用中出现的问题。
    Extension ------> 可以利用core提供的功能,自己编写特定的内存调试工具
  18. 在标准IO库中,rewind函数作用?(将文件内部的位置指针重新指向一个流(数据流/文件)的开头)
  19. lseek(fd,位移数,whence):设置文件偏移量
  20. length=lseek(fd,0,SEEK_END);中的length的值表示 (文件lseek.txt的大小)
  21. 文件描述符的数据类型:int
  22. 文件创建目录: ( mkdir())
  • getpid()获取子进程id
  • getppid()获取父进程id
  • getuid()获取用户id
  • geteuid()获取有效用户id
  • 更改目录:cd ;
  • 查看当前所在的目录位置: pwd;
  • 查看目录下的文件: ls;
  • 修改文件权限:chmod;
  • 查看进程:ps
  1. 移动指针lseek函数的参数:(lseek(int fd ,_off_t offset , int whence))
  2. linux文件系统通常由四部分组成:引导块,超级块,索引节点和 (数据块)
  3. 系统调用的函数原型int open(const char *pathname, int flags),flag值中(O_TRUNC)表示若文件存在且为只读或只写成功打开,则将长度截为0。
  4. 使用下列函数调用int fcntl(int fd, int cmd);来实现文件描述符的复制,cmd参数应使用哪一个?(F_DUPFD
  5. 使用 gdb 调试程序时,next 和 step 命令的作用?(next:单步运行,不进入函数内部; setp:单步运行,进入函数内部)
  6. 进程运行时默认打开的标准对象:标准输入设备stdin、标准输出设备 stdout、标准错误 输出设备 stderr
  7. 修改文件权限命令:chmod、chgrp、chown。
  8. 文件描述符为?整型。对于用户空间来说,任何打开的文件都将分配一个唯一非负整数, 用于标识该打开文件,该值即文件描述符,为一个大于等于 0 的整数。
  9. 权限的值?读:4 写:2 执行:1 注意:前三位为用户的权限,再三位为所属组的权 限,再三位为其他用户的权限。
  10. 获取文件属性,是否穿透?stat 函数具有穿透能力,能够穿透链接文件;而 lstat 函数不 具有穿透能力,不穿透链接文件,文件类型还为链接文件。
  11. opendir 函数:打开一个目录,返回一个目录流指针。参数为欲打开目录的名称(路径)。
    mkdir 函数:第一个参数是欲创建的目录文件路径,第二个参数是创建目录的权限。
  12. fcntl 函数:修改某个文件描述符的特殊属性
  13. 创建硬链接的系统调用:link()

进程

  1. 返回调用进程的进程标识号(pid)的系统函数是(getpid
  2. 一个进程是 (PCB 结构与程序和数据的组合
  3. 调用 (abort函数) 不属于正常结束进程的方法
  4. (fifo 管道)进程之间的通信,数据不可以重复读
  5. c语言中没有明确给定初值的全局变量和静态变量存放在 (未初始化数据区)
  6. 修改文件权限命令:( chmod)
    • 向消息队列发送信号:msgsnd ()
    • 接收队列的函数: msgrcv()
    • 创建消息队列:msgget()
      msgctl()
      IPC_STAT 获取
      IPC_SET 设置
      IPC_RMID 删除
    • shmget()函数用来创建共享内存
    • shmat()函数 作用就是用来启动对该共享内存的访问,并把共享内存连接到当前进程的地址空间
    • shmdt()函数用于将共享内存从当前进程中分离
    • shmctl()函数用来控制共享内存
    • getpid()获取子进程id
    • getppid()获取父进程id
    • getuid()获取用户id
    • geteuid()获取有效用户id
  7. 查看进程的命令:ps
  8. 信号是在软件层次上对(中断)机制的一种模拟, 是一种异步通信方式。
  9. 父进程等待子进程的结束,可以使用的函数是(wait())和(waitpid())
  10. linux主要有两个信号安装函数,分别是什么?(signaction)、(signal)
  11. 一个完整的信号生命周期包含4个重要的事件,这4个重要事件分别是?(信号诞生、信号在进程中注册、信号在进程中注销、信号处理函数执行完毕)
  12. 向消息队列发送消息的函数是(msgsnd)
  13. 信号发送函数中, (alarm)和(setitimer())用于设置定时器,当计时时间到达时,向进程发送SIGALRM信号。
  14. c语言中没有明确给定初值的全局变量和静态变量存放在哪儿?(全局存储区(静态存储区)
  15. 函数geteuid()用于得到进程的? (用户有效 UID 值)
  16. (接到一个信号并终止)属于异常终止一个进程
  17. linux中通过调用waitpid()函数得到进程的退出信息,该函数原型为pid_t waitpid(pid_t pid, int *status, int options);当第一个参数pid取值为-1时,表示(等待任一子进程退出,相当于 wait()
  18. Linux环境中使用kill函数向进程或进程组发送信号。Kill函数原型为
    int kill(pid_t pid, int signo);当第一个参数pid>0时表示( 发送信号给进程ID为pid的进程
  • pid>0 将信号传给进程识别码为pid 的进程。
  • pid=0 将信号传给和目前进程相同进程组的所有进程
  • pid=-1 将信号广播传送给系统内所有的进程
  • pid<0 将信号传给进程组识别码为pid绝对值的所有进程
  1. 修改消息队列状态信息的命令是(msgctl()

  2. 共享主存基本操作(shmat())将共享主存区映射到进程虚拟地址空间

  3. 进程中不能忽略的两个信号?(SIGSTOP和SIGKILL)

  4. 一个进程调用 wait 或 waitpid 函数,可能产生 3 种情况,下列不属于这 3 种情况的是 (如果该进程没有子进程,立即返回,返回值为 0)

  5. 程序和进程是两个不同的概念,以下不能描述这个观点的是 (同一个程序运行 10 次,产生的是同一个进程)

  6. 哪种进程之间的通信,数据不可以重复读(fifo、 管道

  7. 任何进程在运行时默认打开的三个流对象,都有相应的文件描述符,标准文件描述符定义标准输入设备的值为(0

  8. 进程初始化数据区:全局初始化数据区/静态数据区

  9. 进程的堆区:用于动态内存分配。一般由程序员分配和释放,若程序员不释放,程序结束时由 OS回收。

  10. Linux 文件系统中的块有(根据块使用的不同):引导块、超级块、Inode 块、数据块。 控制信息、文件基本属性等是 Inode 节点,为文件系统索引。存放数据的为数据块。超级块中含有文件系统的基本信息,如块大小、指向空间 inode 和数据块的指针等相关信息。

线程

  1. pthread_exit (终止线程
    • 线程的创建函数:pthread_create()
    • 线程分离状态:.pthread_detach()
    • 退出线程:pthread_exit()
    • 取消线程:Pthread_cancel()
  2. 互斥锁的两种状态:(上锁 解锁
  3. 编译有线程的文件要加 (-lpthread)参数
  4. Linux 中采用“一对一”的线程机制,也就是一个用户线程对应一个(内核线程)
  5. 当一个线程的属性设置为(分离状态 detach),该线程结束时立即释放它所占有的系统资源。
  6. (pthread_key_create()) 命令是创建线程私有数据
  7. 下述是Linux下多线程编程常用的pthread库提供的函数名和意义,说法不正确的是?(pthread_exit杀死一个线程
  8. 对线程函数来说,说法正确的是:(pthread_create中参数arg是传递给start_routine函数的参数
  9. 对互斥锁及条件变量说法不正确的是:(在使用条件变量时,互斥锁会失去作用,所以是否有互斥锁关系不重要
  10. 以下说明正确的是:(线程是一个独立的指令流,是在进程中被创建的,随进程的关闭而关闭
  11. 线程A SendMessage给线程B,线程B处理该消息时又SendMessage给线程A,会出现:(继承执行
  12. 读写锁:非阻塞的加锁解锁和阻塞的加锁解锁
  13. 堵塞的方式申请读锁:pthread_rwlock_rdlock()
    非堵塞的方式申请读锁:pthread_rwlock_tryrdlock()
    堵塞方式申请写锁:pthread_rwlock_wrlock()
    非堵塞方式申请写锁:pthread_rwlock_trywrlock()
  14. 互斥锁的上锁函数是 pthread_mutex_lock()
    非阻塞加 try; 解锁函数是 pthread_mutex_unlock()。

网络

  1. (套接字)通信方式适用于不同机器之间的进程通信
  2. UDP,TCP属于(传输层)协议。
  3. 面向连接的编程:TCP;面向无连接的是:UDP
  4. 在不同主机间进行通讯的是:scoket 或者是套接字
  5. 三次握手:连接建立、数据传输、连接释放
  6. 创建套接字的函数 scoket()
  7. 监听网络函数:listen()
    发起连接函数:connect()
    接受连接函数:accept()
    读写 scoket 对象:read()/write()
    TCP 发送和接受数据:send()/recv()
    关闭 scoket 对象:close()
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值