Linux编程期末复习

  • Post author:
  • Post category:linux


下列命令哪个是创建线程私有数据命令(A)

A  pthread_key_create()    B pthread_setspecific()

C  pthread_getspecific()    D pthread_key_delete();

2. 下面哪种通信方式适用于不同机器之间的进程通信。(D )

A.消息队列        B.共享内存        C.信号量        D.套接字

3. 创建或打开消息队列的函数为(A )

A.msgget()        B.msgsnd()        C.msgrcv()        D.  msgctl()

linux中通过调用waitpid()函数得到进程的退出信息,该函数原型为

pid_t waitpid(pit_t pid, int *statloc, int options);当第一个参数pid取值为-1时,表示(A)

A等待任一子进程退出,相当于 wait()。

B等待进程组ID与调用进程组ID相同的任一子进程。

C只等待进程ID等于PID的子进程。

D等待指定进程组中的进程,该进程组id等于 pid的绝对值。

Linux环境中使用kill函数向进程或进程组发送信号。Kill函数原型为

int kill(pid_t  pid,  int signo);当第一个参数pid>0时,表示( A )

A发送信号给进程ID为pid的进程;

B发送信号给进程组ID和该进程相同的进程;

C发送信号给进程组内进程ID为pid的绝对值的进程;

D发送信号给系统的所有进程;

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

A shmat()         B shmdt()     C shmctl()         D shmget()

3. 修改消息队列状态信息的命令是(B)

A msgsnd()         B msgctl()     C msgrcv()         D msgget()

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

¶þ.    多选题

1 哪种进程之间的通信,数据不可以重复读(   )

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

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 #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;

}

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

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;

}

执行程序,代码输出结果为      。

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.为了将当前目录下的压缩归档文件myftp.tar.gz解压缩,可以使用命令

tar  -xvzf  myftp.tar.gz

‌2.在shell环境中,移动文件使用的命令是

mv

3.任何时候用户需要回到上一级目录,可以命令

cd ..

‌4./root目录是

超级用户的个人主目录

5. ‏对所有用户的变量设置,应当放在哪个文件下?

/etc/profile

6. ‎系统调用是(  )。

提供编程人员的接口

‌7.当中央处理器处于内核态时,可以执行的指令是(  )。

计算机系统中的全部命令

8. ‎一个类Unix操作系统具有可移植性,是指它需遵循(  )。

POSIX

9. ​在Linux命令字符界面,编辑一个C语言源程序的工具可以是(  )。

vi, gedit, vim

‌10.vim的3种模式之间的切换操作如下图所示,假设当前处于编辑模式,切换到命令模式,需要使用(  )命令。          Esc 和:

11.用ls –al 命令列出下面的文件列表,_______文件是符号连接文件。lrwxr–r– 1 helusers 2024 Sep 12 08:12 cheng

12.若Linux系统中的一个普通文件访问权限为:属主允许读、写、执行,组用户允许读,其他用户无权限访问,则其权限显示为_____。     -rwxr—–

13.‌UNIX/Linux系统中标准错误的文件描述符值为   2

14.‌当进程试图写入某个文件时,Linux内核判断该进程是否具有写权限是依据(  )。   进程的有效用户ID

15.‏进程通过fopen()打开的每一个文件,Linux内核都会为其创建一个(  )数据结构,进程所有打开文件的这个结构由fd_array[]数组指向,内核通过文件描述符引用fd_array[]数组下标,从而访问这个结构。    file{}

16.‏遵循(  )标准的fread操作使用了带用户缓冲区的读文件操作,用户程序数据区对磁盘数据读前,需经过系统管理的用户缓冲区进行缓冲,从而减少了读磁盘的I/O总次数。     ANSI

17.(  )函数可以对已打开的文件描述符进行各种控制操作以改变已打开文件的各种属性。    fcntl

18.​(  )函数是将内存中的数据写入文件中。      write

19.​下列关于链接的描述,错误的是(  )    硬链接和符号链接都会产生一个新的inode结点

20.‎Linux使用root账户的shadow文件存放用户账户密码,只有root账户才可以读写shadow,普通用户如何通过执行passwd命令修改个人的账户密码。(  )      修改passwd命令的权限为:rwsr-xr-x

21.​以下哪种状态不是进程所拥有的状态。 生存态

22.在Linux操作系统中,运行态和就绪态进程的状态被统一为(   )。 TASK_RUNNING

23.eXec族函数中,只有(    )是系统调用,其他五个都是库函数。  execve

24.‌以下哪种方式会导致进程的异常退出。         被接收到的信号终止

25.‍setsid函数用来设置进程的____。   会话号

26.下列eXec函数中调用者可以通过数组指定命令行参数并通过相对路径查找可执行文件的函数是________。 execvp

27.‎调用fork函数后该函数返回值为0,说明出现以下何种情况?  当前代码运行在子进程中

28.​下面哪个函数既可以指定所等待子进程的ID又可以请求内核返回子进程使用的资源情况汇总?    waitpid

29.‌下列关于进程和程序的描述中哪一项是不正确的?  程序只能在前台运行,而进程可以在前台或后台运行

30.‌重定向是由_______实现的。     Shell

31.​在实现man -k directory | grep read命令时,使用的是______。  管道

32.‍命令cat file>>file2将会(     )。   将file1的内容添加到file2已有内容之后

33.将标准输出重定向到文件描述符为6对应的文件上,对应的c程序语句为______。          dup2(6,1);

34.‎以下关于管道的描述错误的是(     )。  使用pipe函数时,得到的文件描述符数组中,下标为0的是管道的写端

35.‍下面对管道的描述中哪一个是不正确的_________。  管道存在于用户空间中

36.‌管道的读写操作是以(     )的方式进行的。    队列

37.下列有关管道的说法错误的是( )。   读写管道的操作都是原子性的

38.‎创建命名管道除了使用mkfifo函数外,还可以使用(  )函数。      mknod

39.‎以下命令可以将标准错误重定向的是(  )。   ls -l /home &>err.txt

40.​以下哪一种情况不会产生信号。   从信号处理函数退出时

41.以下哪种信号处理方式不需要提前安装信号处理函数。  按默认方式处理

42.​向指定进程发送一个信号可使用函数(   )。  kill

43.以下信号不能被忽略的是( )。SIGSTOP

44.‌kill(pid,signum)函数中,当参数pid为0时表示(  )。 向与调用kill函数的进程同组的进程发送signum信号

45.以下哪个函数无法产生信号?   pause

46.‌以下关于捕捉信号的说法错误的是(  )。  sigaction函数无法获取指定信号当前的处理函数

47.‎以下关于屏蔽信号的说法正确的是(  )。  通常是设置一个需要屏蔽的信号集

48.‍以下不属于伪信号处理函数的是(  )。    SIGINT

49.以下关于信号机制描述错误的是(  )。   使用信号必须安装信号处理函数

50.‌以下进程间通信方式属于异步通信方式的是_________。      信号

51.下面对进程间通信的共享内存机制的描述中哪一个是不正确的?     对共享内存的访问无需再考虑互斥问题

52.‍可以使用命令(  )获取当前系统中所有IPC资源的状态。    ipcs

53.‏以下通信机制属于 SYSTEM V IPC机制的是(  )。  信号量

54.客户端使用服务器创建的共享内存可使用函数(  )。  shmget

55.‍以下不属于SYSTEM V IPC的通信机制是(  )。  信号

56.以下关于通信机制的描述错误的是(  )。     每次对消息队列进程读操作时,会返回队列的第一个消息

57.(  )不是进程通信的目的。    预防死锁

58.‎以下关于IPC对象的描述正确的是(  )。创建IPC对象时,需要约定一个键值,保证通信的多个进程会合在同一个IPC对象上

59.‏以下关于信号量的描述错误的是(  )。

60.信号量的初值通常为0

61.以下哪一项不是线程与进程对比的优点?       线程拥有更灵活的调度策略

62.线程使用以下哪种方式退出时,无法保证不结束整个进程    线程执行eXec函数后,导致当前进程地址空间全部更新

63.‌以下叙述正确的是(  )。  操作系统可以感知到内核级线程,无法感知到用户级线程

64.以下说法正确的是(  )。

65.只有用户级线程的操作系统中,调度以进程为单位,由用户程序控制进程中的多个线程运行。

66.​以下不属于线程私有资源的是    文件描述符表

67.调用pthread_create函数创建一个线程后,(   )会先运行。

68.创建的新线程或调用pthread_create函数的线程

69.以下哪种情况不会导致线程被取消    线程处于CANCELED状态,且线程收到了取消信号

70.‍以下关于线程清理函数的说法,错误的是(  )。 线程从其代码中的return语句结束时,会引发pthread_cleanup_push和pthread_cleanup_pop函数执行

71.‏以下关于线程属性的说法,正确的是(  )?

72.一个线程对应一个属性对象

73.‌以下关于线程私有数据的说法,错误的是(  )?  线程的ID号是线程的私有数据

74.‍以下不属于线程同步机制的是(   )。   正则表达式

75.(  )函数用来初始化一个互斥锁。  pthread_mutex_init

76.‎以下关于互斥锁的描述,错误的是(   )。  若线程申请的互斥锁正被其他线程占用,则该线程将被挂起

77.以下关于读写锁的说法错误的是(  )。     同一时间段只能有一个进程为读锁定竞争资源

78.‌以下关于条件变量的说法,错误的是( )。     使用条件变量需要用pthread_cond_init函数初始化

79.‍以下关于线程同步说法错误的是(  )。    互斥量和条件变量结合使用就不会导致系统死锁

80.pthread_cond_wait函数的作用是   等待参数指定的条件变量发出信号

81.以下关于读写锁,正确的说法是(   )。  使用读写锁的多线程比使用互斥量的多线程并行度更高

82.‎以下函数中,(  )是用于控制条件变量的。  pthread_mutex_timedlock

83.以下(    )步骤是正确的。

①对互斥量加锁



‎②改变互斥量保护的条件



‎③给等待条件的线程发信号



‎④对互斥量解锁

①②④③

84.OSI参考模型共(   )层,TCP/IP协议参考模型共(   )层。

85.7    4

86.​下列协议中,不属于应用层的是(   )。

87.UDP

88.只用于同一主机内部进程间通信的socket可使用的协议族是(   )。

AF_INET

89.以下关于socket的说法,错误的是(    )。

90.仅限使用于TCP/IP协议

91.‍Linux环境C编程时,创建套接字的函数是(   )  socket

92.Linux环境C编程时,用于请求链接的函数是(    )。

93.connect

94.‌以下关于listen函数的描述,正确的是(   )。调用listen函数后,未连接的套接字从CLOSED状态转为LISTEN状态

87以下关于bind函数的说法,错误的是(  )。

bind函数用于TCP服务时,每次调用只能指定端口或IP地址,无法同时指定二者

95.以下(    )协议是socket函数不能使用的。

96.IP协议

linux中把分区和目录对应的过程叫做   挂载       。

信号是在软件层次上对   中断    机制的一种模拟, 是一种异步通信方式。

用GCC编译过程可以被细分为四个阶段: 预处理,编译,汇编,连接   。

编译有线程的文件要加   -lpthread   参数。

父进程等待子进程的结束,可以使用的函数是   wait( )  和 waitpid( )   。

linux主要有两个信号安装函数,分别是signal( ),sigaction( )

Linux操作系统内核由  C和汇编  编写完成。

使用gdb调试程序时,,next和step命令的作用?

next:单步运行,不进入函数内部;setp单步运行,进入函数内部

9. 目录   /boot  下存放linux操作系统启动时所要用到的程序

10. Linux 系统的设备文件分为三类?

字符设备文件、块设备文件和网络设备文件

11. Linux 中采用“一对一”的线程机制,也就是一个用户线程对应一个 内核线程 。

12. vim三种模式:在命令模式下按下   :  就进入了底线命令模式。

13. 标准I/O提供了三种类型的缓冲,分别是?

全缓冲,行缓冲,不带缓冲

14. linux文件系统由四部分组成,               用于存放文件的控制信息。

15. 一个完整的信号生命周期包含4个重要的事件,这4个重要事件分别是?

信号诞生     信号在进程中注册     信号在进程中注销     信号处理函数执行完毕

16. 互斥锁只有两种状态,即?开锁和上锁

17. 线程本身调用   pthread_exit()            函数可以退出线程。

18. 向消息队列发送消息的函数是    msgrcv()   。

19.     stat    系统调用可以根据文件描述符来操作文件特性。

20. Valgrind包括很多工具,   Memcheck    是valgrind应用最广泛的工具,一个重量级的内存检查器,能够发现开发中绝大多数内存错误使用情况,  Cachegrind  是主要用来检查程序中缓存使用出现的问题。

21. 信号发送函数中,   setitimer() 用于设置定时器,当计时时间到达时,向进程发送SIGALRM信号。

22. 在标准IO库中,rewind函数作用? 将文件流指针指向文件起始位置

23. c语言中没有明确给定初值的全局变量和静态变量存放在哪儿?未初始化数据区

24. 函数geteuid()用于得到进程的?用户有效UID

25. 当一个线程的属性设置为   分离状态  ,该线程结束时立即释放它所占有的系统资源。

在创建Linux分区时,一定要创建哪两个分区?

SWAP/根分区

当使用mount命令进行设备或文件系统挂载的时候,需要用到的设备名称位于哪个目录?

/dev

下列关于/etc/fstab文件描述,正确的是哪个?

CD_ROM必须是自动加载的

为卸载一个软件包,应使用哪个命令?

rpm -e

光盘使用的文件系统类型为哪一个?

iso9660

存放用户账号的文件是以下哪个文件?

/etc/passwd

以下关于passwd命令的说法,不正确的是哪个?

普通用户使用passwd命令能够修改自己和其他用户的密码

为了达到使文件拥有人有读写权限,而其他人只具有读权限,应如何设置权限?

644

如果执行chmod 746 file,那么文件的权限是什么?

rwxr–rw-

使用userdel命令删除用户时,使用哪个选项能够删除用户家目录及邮箱?

-r

Linux是所谓的Free Software,其中Free的含义是什么?(   )

Linux可自由修改和发布

以下关于Linux内核版本的说法,错误的是(   )。

1.5.2表示稳定的发行版

与Windows相比,Linux在哪方面相对应用得较少?(   )

桌面

以下哪个软件不是Linux的发行版本?

Fedora 18

1.glibc是GUN发布的libc库,即c运行库。glibc是Linux系统中最底层的API,几乎其它任何运行库都会依赖于glibc。        对

‌2.GNU是GNU Is Not Unix的递归缩写,是自由软件基金会的一个项目。  对

3.GPL是General Public License的缩写,它允许软件作者拥有软件版权,但授予其他任何人以合法复制、发行和修改软件的权利。    对

​4.bash是一种命令解释器(shell)    对

​5.AT&T Bell Laboratory是Linux的创始人。   错

6. ‎在Linux系统中,设备被当作文件来访问。  对

7. ‎readdir函数的返回值为空一定意味着目录遍历的结束  错

8. ‍在Linux/UNIX系统中,为了删除一个文件,必须对包含该文件的目录具有写权限和执行权限。   对

9. 通过mkdir函数创建一个新的空目录,其中的. 和 .. 两个目录项需要手动创建  错

10. ‌fd=open(“example.c”,O_CREAT|O_EXCL,S_IRUSR|S_IWUSR));语句使用open系统调用在当前目录下创建一个名为example.c的文件,并且新文件的存取权限为所有者同组用户可读可写。    错

11. ‍‏以下程序执行成功时,最后显示的内容是:******This is the end******

‏#include <stdio.h>



‏#include <unistd.h>



‏int main()   {




‏    char * argv[ ]={“cp”,”/etc/passwd”,”tmppass”,NULL};



‏    printf(“Let’s use execvp.\n”);



‏    execvp(“cp”,argv);



‏    printf(“******This is the end******”);



‏}                               错

12. ‌fork和vfork函数都可以用来创建新进程。  对

13. 在Linux环境下,可以使用top和ps命令来查看进程的情况,区别是top命令反映的是系统进程动态信息,ps命令反映的是系统进程过去的一次性快照。   对

14. ‌守护进程独立于控制终端,运行在前台,执行日常事务的特殊进程,Linux的大多数服务器是以守护进程实现的。   错

‎15. ‎Shell可以管理命令或程序的输入输出。     对

16. ‍标准错误stderr无法重定向。    错

17. ‏管道只能用于有亲缘关系的进程进行通信。  错

18. 以下语句创建了一个匿名管道,其中parr[1]记录了管道的读端,parr[0]记录了管道的写端。



int  parr[2];



pipe(parr);



19. ‍管道是一种特殊的文件,所以操作文件时可以使用的函数都可以用于操作管道。

‍  错

20.支持排队的信号被称为不可靠信号。   错

21.使用signal函数时,可以设置要屏蔽的信号集      错

22.​信号是一种通信机制,可以用于处理异步事件。  对

23.当进程响应信号x转去执行信号处理函数时又收到了信号y,此时若处理信号y,一定会发生数据损毁。  错

​24.信号机制不仅可以向进程通知事件,还可以给进程传递数据。  对

25.‌SYSTEM V IPC中信号量集机制中信号量的P操作和V操作都是通过调用semop函数来实现的。    对

26.‍使用共享内存无法解决多个进程同时读写的冲突。  对

27.操作IPC对象时,既可以使用该对象的键值,也可以使用该对象的id值。错

28.‍使用共享内存的进程在创建或关联了共享内存后,还需要将共享内存绑定到自己的进程空间中。   对

29.‌信号量也可用于线程间通信。  对

30.‌同一进程的所有线程共享进程的所有信息,包括堆栈。   对

31.线程可以分为用户级线程和内核级线程。    对

32.可以通过两个线程ID是否相当来判断这两个线程是否是同一个线程。   错

33.调用pthread_create函数创建线程时,通过函数参数arg传给启动例程的执行参数只能有一个,传递多个参数将会出错。    对

34.‌编写Linux下的多线程程序时,编译需要用到-thread选项。   错

35.可以为互斥锁设置一个属性对象。   对

36.线程为了使用资源而申请互斥锁时,若互斥锁被占用,线程只能将自己挂起。   错

37.​多个线程申请同一个互斥锁有可能导致系统死锁。  对

38.​条件变量需要和一个互斥量联系起来。  对

39.​被初始化的互斥量或条件变量必须使用pthread_mutex_destroy或pthread_cond_destroy函数销毁    错

40.‏socket编程中,可靠的面向连接服务的套接字称为SOCK_STREAM。  对

41.‌socket编程中,面向无连接服务,数据通过相互独立的报文进行传输的套接字称为SOCK_STREAM。   错

42.UDP属于网络层协议。  错

43.通常计算机采用小端模式存储数据,而网络采用大端传输,因此在使用socket传输数据时,需要进行统一的转换。 对

44.‌socket函数建立的套接字只能用于TCP或UDP连接。  错

两个文件之间的拷贝

#include <stdio.h>

#include <stdlib.h>

#include <fcntl.h>

int main()

{


int fd , fdcopy;

char buf[15]={‘0’};

fd = open(“./test.txt”, O_RDWR|O_CREAT);

fdcopy=dup(fd);

write(fdcopy,”CLASS_NAME”,10);

lseek(fdcopy, 0, SEEK_SET);

read(fd, buf, 10);

printf(“%s\n”, buf);

close(fd);

return 0;

}

2.    打开一个文件,把小写字母转换到大写字母写到另一个文件中?

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#include <fcntl.h>

int main()

{


int file1,file2;

char str[20]={‘0’};

file1 = open(“./file1.txt”,O_RDWR|O_CREAT,0777);

file2 = open(“./file2.txt”,O_RDWR|O_CREAT,0777);

write(file1,”abcdefghijklmn”,14);

lseek(file2, 17, SEEK_SET);

write(file2,”ABCDEFGHIJKLMN”,14);

lseek(file1, 0, SEEK_SET);

read(file1,str,14);

lseek(file2, 0, SEEK_SET);

write(file2,str,14);

close(file1);

close(file2);

return 0;

}

5.3个fork打印8个helloword

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <sys/types.h>

int main()

{fork();

fork();

fork();

printf(“hello world!!!\n”);

return 0; }



版权声明:本文为m0_52307297原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。