linux系统编程考试(答案)

合集下载

linux试题及答案(全)

linux试题及答案(全)
怎么去提高与学习linux学习,不可否认练习是一个比较好,也比较有效果的一个方法,但有很多人在练习操作时,很多题都会带来困扰,下面我就把一些简单的操作实例分享给大家,大家一起来学习linux:
Linux课后习题,linux练习题,linux进步练习题,linux操作练习题
一、命令部分
1.新建一个用户yangang,密码设为123456,并将其加到root组。写出所用命令。
(2)0 8-18 * * * cut -f 1 >> /backup/bak01.txt
2. 某学校内部既存在WINDOWS操作系统,又存在LINUX操作系统,为了方便资源共享,建立一台SAMBA服务器,其地址为192.168.0.5,建立std、teacher两个用户,同时设置其密码。
创建用户:useradd std
service sshd restart
71.创建一个以自己的名的拼音命名的用户。
useradd chengwen
72.添加一个用户组,名称为js。
groupadd js
73.修改新建的用户属于js组。
usermod –g js newuser
74.进入该用户主目录,显示当前的路径。
cal 12 2011
57.建立文件/etc/group的符号链接文件/root/abc。
ln –s /etc/group /root/abc
58.后台启动程序gedit。
Gedit &
59.配置网卡eth0的IP地址为192.168.0.1,子网掩码为255.255.255.0
ifconfig eth0:192.168.0.1 netmask 255.255.255.0

Linux考试练习题(附答案)

Linux考试练习题(附答案)

Linux考试练习题(附答案)一、选择1、下列()不属于Linux常用的shell:A、bashB、shC、ashD、bach2、在添加用户的时候可以使用()参数来指定用户的默认shell:A、-dB、-sC、-cD、-g3、更改用户密码使用()命令:A、useraddB、passwdC、groupaddD、finger4、使用rpm安装一个软件的正确命令是():A、rpm -eB、rpm -iC、rpm -vD、rpm -U5、观察系统当前进程的运行情况的命令是():A、freeB、dmesgC、topD、last6、下列()环境变量表示当前目录:A、PATHB、HOMEC、PWDD、SHELL7、删除用户的时候可以使用()参数,把用户的主目录也一起删除:A、-dB、-rC、-cD、-g8、添加用户组使用()命令:A、groupaddB、newgrpC、useraddD、userdel9、卸载一个rpm包的命令是():A、rpm -eB、rpm -iC、rpm -UD、rpm -v10、下面哪个命令可以显示文本文件的内容( ):A、moreB、lnC、manD、type11、下面哪个目录存放用户密码信息() :A、/bootB、/etcC、/varD、/dev12、下面哪个命令可以分页显示大文本文件( ):B、catC、moreD、type13、默认情况下管理员创建一个用户,就会在()目录下创建一个用户主目录:A、/usrB、/homeC、/rootD、/etc14、为了将当前目录下的归档文件myftp.tgz解压缩到/tmp目录下,我们可以使用:A. tar xvzf myftp.tgz -C /tmpB. tar xvzf myftp.tgz -R /tmpC. tar vzf myftp.tgz -X /tmpD. tar xvzf myftp.tgz /tmp15、为了保证系统的安全,现在的linux系统一般将/etc/passwd 密码文件加密后,保存为____ 文件。

linux 试题及答案

linux 试题及答案

linux 试题及答案第一部分:选择题1. Linux 是一种()操作系统。

a) 开源b) 闭源c) 商业d) 私有答案:a) 开源2. 在 Linux 中,用于显示当前所在路径的命令是()。

a) pwdb) lsc) cdd) cp答案:a) pwd3. 在 Linux 中,用于创建目录的命令是()。

a) mkdirb) touchc) rmd) mv答案:a) mkdir4. Linux 中,用于列出当前目录下的文件和文件夹的命令是()。

a) lsb) cdc) pwdd) rm答案:a) ls5. 在 Linux 中,用于复制文件的命令是()。

a) cpb) mvc) touchd) mkdir答案:a) cp第二部分:填空题1. Linux 操作系统的核心部分被称为()。

答案:内核2. Linux 中,用于修改文件或目录的权限的命令是()。

答案:chmod3. 在 Linux 中,用于压缩文件的命令是()。

答案:tar4. Linux 是基于()开发的操作系统。

答案:UNIX5. Linux 中,默认的超级用户账户是()。

答案:root第三部分:简答题1. 什么是 Linux 操作系统?答:Linux 是一种开源操作系统,它基于 UNIX 操作系统开发而成。

Linux 以其稳定性、可定制性和安全性而闻名,并广泛运用于服务器和嵌入式设备等领域。

2. 如何在 Linux 中创建一个新用户?答:可以使用 `useradd` 命令来创建一个新用户,例如 `useradd -m newuser`。

其中,`-m` 参数表示同时创建用户的主目录。

3. 如何修改文件的访问权限?答:可以使用 `chmod` 命令来修改文件的访问权限。

例如,要将文件的所有者权限设置为可读可写可执行,可以使用 `chmod u+rwx filename` 命令。

4. 如何在 Linux 中安装软件包?答:可以使用包管理器,如 `apt` (用于 Debian 系统)或 `yum` (用于 Red Hat 系统),来安装软件包。

linux系统编程试卷(答案)

linux系统编程试卷(答案)

凌阳教育嵌入式培训系统编程部分测试试题注:考试为闭卷,程序题需上机操作运行出结果,考试时间为120分钟一:选择题(本题共4小题,每题3分共12分)1)下列不是Linux系统进程类型的是( D )A 交互进程B 批处理进程C 守护进程D 就绪进程(进程状态)2)以下对信号的理解不正确的是( B )A 信号是一种异步通信方式B 信号只用在用户空间进程通信,不能和内核空间交互C 信号是可以被屏蔽的D 信号是通过软中断实现的3)进程有三种状态( C )A 准备态、执行态和退出态B 精确态、模糊态和随机态C 运行态、就绪态和等待态D 手工态、自动态和自由态4)不是进程和程序的区别( B)A 程序是一组有序的静态指令,进程是一次程序的执行过程B 程序只能在前台运行,而进程可以在前台或后台运行C 程序可以长期保存,进程是暂时的D 程序没有状态,而进程是有状态的二:填空题(本题共6小题,2)、3)两题每空四分,其余每空一分。

共23分)1) 列举八种常见的进程间通信方式无名管道、有名管道、消息队列、信号量、共享内存、信号、套接字网络上两个主机的进程间通信方式为套接字2) 命名管道比无名管道的优势提供了一个可以访问的路径名,实现没亲缘关系的进程间通信3) 消息队列比命名管道和无名管道的优势可以按类型实现消息的随机查询,没必要先进先出4) 按照逻辑结构不同进行数据库划分,Sqlite 数据库属于哪一类关系型数据库5) 在C语言中操作sqlite数据库,常用的2中方式是sqlite_exec(回调)、sqlite_gettable(非回调)6) 列举四种进程调度算法先来先调度(FCFS)、短进程优先调度(SPF)、高优先级调度(HPF)、时间片轮转调度三:问答题(本题共7题,每题5分,共35分)1) 什么是系统调用?系统调用是通过什么方式陷入内核态的?请写出你对系统调用的理解。

什么是文件I/O和标准I/O库?文件I/O和标准I/O库的区别?系统调用是指操作系统提供给用户程序调用的一组特殊接口,用户程序可以通过这组接口获得操作系统内核提供的服务。

linux考试试题及答案

linux考试试题及答案

Linux考试试题及答案一、选择题1、在/etc/fstab 文件中指定的文件系统加载参数中,那个参数一般用于CD-ROM 等移动设备(D )A. defaultsB. swC. rw 和 roD. noauto2、Linux 文件权限一共 10 位长度,分成四段,第三段表示的内容是(C)A. 文件类型B. 文件所有者的权限C. 文件所有者所在组的权限D. 其他用户的权限3、在使用 mkdir 命令创建新的目录时,在其父目录不存在时先创建父目录的选项是(D)A. -mB. -dC. -fD. -p4、一台主机要实现通过局域网与另一个局域网通信,需要做的工作是(C)A. 配置域名服务器B. 定义一条本机指向所在网络的路由C. 定义一条本机指向所在网络网关的路由D. 定义一条本机指向目标网络网关的路由5.下列提法中,不属于 ifconfig 命令作用范围的是(D)A. 配置本地回环地址B. 配置网卡的 IP 地址C. 激活网络适配器D. 加载网卡到内核中6、下列关于链接描述,错误的是(B)A. 硬链接就是让链接文件的 i 节点号指向被链接文件的 i 节点B. 硬链接和符号连接都是产生一个新的 i 节点C. 链接分为硬链接和符号链接D. 硬连接不能链接目录文件7、下列文件中,包含了主机DNS 配置信息的文件是(C )A. /etc/host.confB. /etc/hostsC. /etc/resolv.confD. /etc/networks8、那个命令可以从文本文件的每一行中截取指定内容的数据(D)A.cpB.ddC.fmtD.cut9、Linux 有三个查看文件的命令,若希望在查看文件内容过程中可以用光标上下移动来查看文件内容,应使用(C)命令。

A.catB.moreC.lessD.menu10、对名为 fido 的文件用 chmod 551 fido 进行了修改,则它的许可权是(D)A.-rwxr-xr-xB.-rwxr--r--C.-r--r--r--D.-r-xr-x—x11、文件 exer1 的访问权限为 rw-r--r--,现要增加所有用户的执行权限和同组用户的写权限,下列命令正确的是(A)A.chmod a+x g+w exer1B.chmod 765 exer1C.chmod o+x exer1D.chmod g+w exer112、有关归档和压缩命令,下面描述正确的是(C)A.用 uncompress 命令解压缩由 compress 命令生成的后缀为.zip 的压缩文件B.unzip 命令和 gzip 命令可以解压缩相同类型的文件C.tar 归档且压缩的文件可以由 gzip 命令解压缩D.tar 命令归档后的文件也是一种压缩文件13、下列那一项不是进程和程序的区别(B)A.程序是一组有序的静态指令,进程是一次程序的执行过程B.程序只能在前台运行,而进程可以在前台或后台运行C.程序可以长期保存,进程是暂时的D.程序没有状态,而进程是有状态的14、下列关于/etc/fstab 文件描述,正确的是(D)A.fstab 文件只能描述属于 linux 的文件系统B.CD_ROM 和软盘必须是自动加载的C.fstab 文件中描述的文件系统不能被卸载D.启动时按 fstab 文件描述内容加载文件系统15、如果想配置一台匿名 ftp 服务器,应修改那个文件(C)A./etc/gatewayB./etc/ftpserversC./etc/ftpusersD./etc/inetd.conf16、关于进程调度命令,那一项是不正确的(B)A.当日晚 11 点执行 clear 命令,使用 at 命令:at 23:00 today clearB.每年 1 月 1 日早上 6 点执行 date 命令,使用 at 命令:at 6am Jan 1 dateC.每日晚 11 点执行 date 命令,crontab 文件中应为:0 23 * dateD.每小时执行一次 clear 命令,crontab 文件中应为:0 */1 * clear17、可以完成主机名与 IP 地址的正向解析和反向解析任务的命令是(A)A.nslookupB.arpC.ifconfigD.dnslook18、将光盘/dev/hdc 卸载的命令是(C)A.umount/dev/hdcB.unmount/dev/hdcC.umount/mnt/cdrom /dev/hdcD.unmount/mnt/cdrom /dev/hdc19、用 ftp进行文件传输时,有两种模式(C)E.Word 和 binaryF.txt 和 Word DocumentG.ASCII 和 binaryH.ASCII 和 Rich Text Format20、crontab 文件由六个域组成,每个域之间用空格分割,其排列如下(B)I.MIN HOUR DAY MONTH YEAR COMMANDJ.MIN HOUR DAY MONTH DAYOFWEEK COMMANDMAND HOUR DAY MONTH DAYOFWEEKMAND YEAR MONTH DAY HOUR MIN二、填空题1. 在Linux系统中,以文件方式访问设备。

linux操作系统考试试卷(含答案)A

linux操作系统考试试卷(含答案)A

试卷编号01 拟题教研室(或教师)签名教研室主任签名长沙理工大学考试试卷………………………………………………………………………………………………………………课程名称(含档次)linux操作系统课程代号专业层次(本、专)考试方式(开、闭卷)开一、单项选择题(每题2分,共40分)1.Linux系统是一个()的操作系统A.单用户、单任务B.单用户、多任务C.多用户、单任务D.多用户、多任务2.要给文件file1加上其他人可执行属性的命令是()A.chmod a+xB.chown a+xC.chmod o+xD.chown o+x3.配置主机网卡IP地址的配置文件是()A./etc/sysconfig/network-scripts/ifcfg-eth0B./etc/sysconfig/networkC./etc/resolv.confD./etc/host.conf4.Linux系统能够直接读取的分区类型是()A.NTFSB.FAT16C.FAT32D.ext35.下列命令能启动DNS服务的是()A.service named startB./etc/init.d/named startC.service dns startD./etc/init.d/dns restart6. /dev/sdc6分区表示( )A. 第2块IDE硬盘的第6个分区,是逻辑分区B.第3块IDE硬盘的第6个分区,是逻辑分区C. 第3块SCSI硬盘的第6个分区,是逻辑分区D.第3块SCSI硬盘的第2个分区,是逻辑分区7. Linux 下用一条命令创建/A/S/D目录结构的命令是: ( )A. mkdir /A/S/DB. mkdir –p A/S/DC. mkdir –p /A/S/DD. mkdir –r A/S/D8.为了将当前目录下的压缩归档文件myftp.tar.gz解压缩,我们可以使用:( )。

A. tar -xvzf myftp.tar.gzB. tar -xvz myftp.tar.gzC. tar -vzf myftp.tar.gzD. tar -xvf myftp.tar.gz9.比较重要的系统配置资料,一般来说大部分位于( )目录下。

Linu期末考试试题8套(含答案)

Linu期末考试试题8套(含答案)

Linux 期末考试试题(一)一、选择题( 每小题2 分,共50 分)1.在创建Linux 分区时,一定要创建( D )两个分区A. FAT/NTFSB. FAT/SWAPC. NTFS/SWAPD.SWAP/根分区2.在Red Hat Linux 9中,系统默认的(A)用户对整个系统拥有完全的控制权。

A. rootB. guestC. administratorD.supervistor.3.当登录Linux 时,一个具有唯一进程ID 号的shell 将被调用,这个ID 是什么( B )A. NIDB. PIDC. UIDD. CID4.下面哪个命令是用来定义shell 的全局变量( D )A. exportfsB. aliasC. exportsD. export5.哪个目录存放用户密码信息( B )A. /bootB. /etcC. /varD. /dev6.默认情况下管理员创建了一个用户,就会在( B )目录下创建一个用户主目录。

A. /usrB. /homeC. /rootD. /etc7.. 当使用mount 进行设备或者文件系统挂载的时候,需要用到的设备名称位于( D )目录。

A. /homeB. /binC. /etcD. /dev8.如果要列出一个目录下的所有文件需要使用命令行( C )。

A. ls TB. lsC. ls 旬所有)D. ls -d9.哪个命令可以将普通用户转换成超级用户(D )A. superB. passwdC. tarD. su10.除非特别指定,cp 假定要拷贝的文件在下面哪个目录下( D )A. 用户目录B. home 目录C. root 目录D. 当前目录11.在vi编辑器里,命令"dd"用来删除当前的(A )A. 行B. 变量C. 字D. 字符12.当运行在多用户模式下时,用Ctrl+ALT+F* 可以切换多少虚拟用户终端( B )A. 3B. 6C. 1D. 1213.Linux 启动的第一个进程init 启动的第一个脚本程序是( B )。

Linux测试题(内附答案)

Linux测试题(内附答案)

期末测试卷1一、选择题(每题2分,共50分)下列各题A、B、C、D四个选项中,只有一个选项是正确的,请将正确的选项涂写在答题卡相应位置上,答在试卷上不得分。

1.Linux系统是一个()的操作系统。

A.单用户、单任务B.单用户、多任务C.多用户、单任务D.多用户、多任务2.Red Hat Linux 9系统中用户默认的Shell是()。

A.bashB.kshC.cshD.sh3.如果忘记了ls命令的用法,可以采用()命令获得帮助。

A.?lsB.help lsC.man lsD.get ls4.要给文件file1加上其他人可执行属性的命令是()。

A.chmod a+x file1B.chown a+x file1C.chmod o+x file1D.chown o+x file15.使用$cd ~命令后,会进入( ) 目录。

A. /B. ~C.用户的主目录D. /tmp6.添加用户“user”的命令是()。

er usereradd userC.add userD.adduser7.删除用户“user”及其主目录下所有文件的命令是()。

erdel -p usererdel -r usererdel -a usererdel -z user8.查看系统当中所有进程的命令是()。

A.ps allB.ps aixC.ps aufD.ps aux9.配置主机网卡IP地址的配置文件是()。

A./etc/sysconfig/network-scripts/ifcfg-eth0B./etc/sysconfig/networkC./etc/resolv.confD./etc/host.conf10.指定系统主机名的配置文件是()。

A./etc/hostsB./etc/host.confC./etc/sysocnfig/networkD./etc/resolv.conf11.以下命令可以重新启动计算机的是()。

A.rebootB.haltC.shutdownD.init 612.Linux系统默认使用的文件系统类型是()。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

linux系统编程考试(答案)————————————————————————————————作者:————————————————————————————————日期:凌阳教育嵌入式培训系统编程部分测试试题注:考试为闭卷,程序题需上机操作运行出结果,考试时间为120分钟一:选择题(本题共4小题,每题3分共12分)1)下列不是Linux系统进程类型的是( D )A 交互进程B 批处理进程C 守护进程D 就绪进程(进程状态)2)以下对信号的理解不正确的是( B )A 信号是一种异步通信方式B 信号只用在用户空间进程通信,不能和内核空间交互C 信号是可以被屏蔽的D 信号是通过软中断实现的3)进程有三种状态( C )A 准备态、执行态和退出态B 精确态、模糊态和随机态C 运行态、就绪态和等待态D 手工态、自动态和自由态4)不是进程和程序的区别( B)A 程序是一组有序的静态指令,进程是一次程序的执行过程B 程序只能在前台运行,而进程可以在前台或后台运行C 程序可以长期保存,进程是暂时的D 程序没有状态,而进程是有状态的二:填空题(本题共6小题,2)、3)两题每空四分,其余每空一分。

共23分)1) 列举八种常见的进程间通信方式无名管道、有名管道、消息队列、信号量、共享内存、信号、套接字网络上两个主机的进程间通信方式为套接字2) 命名管道比无名管道的优势提供了一个可以访问的路径名,实现没亲缘关系的进程间通信3) 消息队列比命名管道和无名管道的优势可以按类型实现消息的随机查询,没必要先进先出4) 按照逻辑结构不同进行数据库划分,Sqlite 数据库属于哪一类关系型数据库5) 在C语言中操作sqlite数据库,常用的2中方式是sqlite_exec(回调)、sqlite_gettable(非回调)6) 列举四种进程调度算法先来先调度(FCFS)、短进程优先调度(SPF)、高优先级调度(HPF)、时间片轮转调度三:问答题(本题共7题,每题5分,共35分)1) 什么是系统调用?系统调用是通过什么方式陷入内核态的?请写出你对系统调用的理解。

什么是文件I/O和标准I/O库?文件I/O和标准I/O库的区别?系统调用是指操作系统提供给用户程序调用的一组特殊接口,用户程序可以通过这组接口获得操作系统内核提供的服务。

系统调用是通过软件中断方式陷入内核的linux的文件I/O是由操作系统提供的基本IO服务, 标准I/O库通过封装系统调用,提供了一个到底层I/O的接口。

标准I/O默认采用了缓冲机制,还创建了一个包含文件和缓冲区相关数据的数据结构;文件I/O一般没有采用缓冲模式,需要自己创建缓冲区。

一种是标准库封装系统调用而成,更高级,一种是系统提供的,比较低级;标准I/O可移植性高、文件I/O可移植性低。

2) 什么是进程?用fork()创建一个子进程时,系统会做什么工作进程是具有独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配的单位,不仅是系统内部独立运行的实体也是独立竞争资源的实体。

用fork()时系统会分配子进程一个ID号然后继承父进程的地址空间,包括进程上下文进程堆栈打开的文件描述符等等,他就是父进程的一个复制品。

3) 进程和线程有什么区别?每个独立的进程有一个程序运行的入口、顺序执行序列和程序的出口。

但是线程不能够独立执行,必须依存在进程程中,由进程提供多个线程执行的控制。

进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行。

4) 什么是线程的互斥和同步,程序应怎样写才能达到互斥或同步?互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。

但互斥无法限制访问者对资源的访问顺序,即访问是无序的。

同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。

在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。

少数情况是指可以允许多个访问者同时访问资源。

在写程序时可以用互斥锁和信号量实现线程同步,一个线程访问共享资源时给这个资源上锁其他线程就不能访问了直到上锁的进程释放互斥锁为止。

5) 什么是僵尸进程?孤儿进程?守护进程?僵尸进程:僵尸进程是指它的父进程已经退出(父进程没有等待(调用wait/waitpid)它),而该进程dead之后没有进程接受,就成为僵尸进程,也就是(zombie)进程。

孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。

孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。

守护进程:是指在UNIX或其他多任务操作系统中在后台执行的电脑程序,并不会接受电脑用户的直接操控。

此类程序会被以进程的形式初始化。

守护进程程序的名称通常以字母“d”结尾:例如,syslogd就是指管理系统日志的守护进程。

通常,守护进程没有任何存在的父进程(即PPID=1),且在UNIX系统进程层级中直接位于init之下。

守护进程程序通常通过如下方法使自己成为守护进程:对一个子进程调用fork,然后使其父进程立即终止,使得这个子进程能在init下运行。

这种方法通常被称为“脱壳”6) 有3个线程:A、B、C,现要求A先执行,然后B再执行,最后C再执行,之后A->B->C循环执行,请说出大体的思路?创建3个信号量sem_A、sem_B、sem_C,分别用来给A、B、C 3个线程,启动sem_A信号量的初始值为1,其余2个信号量初始值为0,当主线程创建3个子线程后,因为sem_A 的值大于0,所以只有A线程执行相关的代码,B、C线程堵塞在对sem_B、sem_C信号量的p操作;当A线程执行完相应的代码后,给sem_B信号量加1,之后B线程开始执行相关操作,在此时A线程堵塞在对sem_A信号量的p操作,C线程继续堵塞;当B线程执行完毕相关操作后,给sem_C进行V操作,B线程堵塞,C线程执行相关操作;以上是从A->B->C线程执行的流程.7) exit()、_exit()和return()的区别?exit():结束当前的进程,并且会刷新缓存区,关闭没有关闭的文件等_exit():结束当前的进程,不对缓存区刷新return:1:在main函数中会结束当前进程2:在子函数中,会返回调用当前函数的调用位置,进程从下个C语句开始执行四:程序题(本小题共3题,每题10分共30分)1)用多线程、信号量实现生产者和消费者的模拟,仓库容量为10,仓库中开始有3件产品,消费者每3秒消费一件产品,生产者每两秒生产一个产品,生产者和消费者不能同时进入仓库(需要互斥)//信号量---线程间通信//“生产者消费者”问题#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<semaphore.h>#include<pthread.h>#define msleep(x)usleep(x*1000)#define PRODUCT_SPEED 3 //生产速度#define CONSUM_SPEED 1 //消费速度#define INIT_NUM 3 //仓库原有产品数#define TOTAL_NUM 10 //仓库容量sem_t p_sem, c_sem, sh_sem;int num=INIT_NUM;void product(void) //生产产品{sleep(PRODUCT_SPEED);}int add_to_lib() //添加产品到仓库{num++;//仓库中的产品增加一个msleep(500);return num;}void consum() //消费{sleep(CONSUM_SPEED);}int sub_from_lib() //从仓库中取出产品{num--; //仓库中的产品数量减一msleep(500);return num;}void *productor(void *arg) //生产者线程{while(1){sem_wait(&p_sem);//生产信号量减一product();// 生产延时sem_wait(&sh_sem);//这个信号量是用来互斥的printf("push into! tatol_num=%d\n",add_to_lib());sem_post(&sh_sem);sem_post(&c_sem); //消费信号量加一}}void *consumer(void *arg) //消费者线程{while(1){sem_wait(&c_sem); //消费者信号量减一sem_wait(&sh_sem);printf("pop out! tatol_num=%d\n",sub_from_lib());sem_post(&sh_sem);sem_post(&p_sem);//生产者信号量加一consum();//消费延时}}int main(){pthread_t tid1,tid2;sem_init(&p_sem,0,TOTAL_NUM-INIT_NUM);sem_init(&c_sem,0,INIT_NUM);sem_init(&sh_sem,0,1);pthread_create(&tid1,NULL,productor,NULL);pthread_create(&tid2,NULL,consumer,NULL);pthread_join(tid1,NULL);pthread_join(tid2,NULL);return 0;}2)编写一个多线程的程序:要求:1、创建2个子线程,主进程要传递3个参数给线程1,传递另一个参数给线程2;2、线程1、线程2中对每个传给线程的参数加1,等线程都执行完毕后,进程打印出四个参数的值。

3、传给线程1参数的值必需要能够改变,传给线程2参数的值必需不能改变#include <stdio.h>#include <unistd.h>#include <pthread.h>typedef struct{int A;int B;int C;}DATA;/*传参方法1*/void *thread_1(void *arg){DATA *rec;sleep(1);rec = (DATA *)arg;rec->A += 1;rec->B += 1;rec->C += 1;return NULL;}/*传参方法2*/void *thread_2(void * arg){int rec = 0;sleep(1);rec = (int )(arg);rec ++;return NULL;}int main(int argc, char *argv[]){pthread_t tid1,tid2;DATA test;int D = 100;test.A = 100;test.B = 100;test.C = 100;/*创建两个线程*/pthread_create(&tid1, NULL, (void *)thread_1, (void *)(&test));pthread_create(&tid2, NULL, (void *)thread_2, (void *)D);pthread_join(tid1, NULL);pthread_join(tid2, NULL);printf("A=%d\n", test.A);printf("B=%d\n", test.B);printf("C=%d\n", test.C);printf("D=%d\n", D);return 0;}3) 编制一段程序,实现进程的管道通信:使用系统调用pipe()建立一条管道线,2个子进程分别向管道各写一句话:Child process 1 is sending a message!Child process 2 is sending a message!而父进程则从管道中读出来自于2个子进程的信息,显示在屏幕上。

相关文档
最新文档