当前位置:文档之家› xlib库基本图形编程技术文档新手入门linux时代开源、自由、共享...

xlib库基本图形编程技术文档新手入门linux时代开源、自由、共享...

xlib库基本图形编程技术文档新手入门linux时代开源、自由、共享...
xlib库基本图形编程技术文档新手入门linux时代开源、自由、共享...

xlib库基本图形编程技术文档新手入门linux时代开源、自

由、共享...

Xlib库基本图形编程

Basic Graphics Programming With The Xlib Library

http://users.actcom.co.il/~choo/lupg/tutorials/xlib-programming/ xlib-programming.html

1. Preface

2. The Client And Server Model Of The X Window System

3. GUI programming - the Asynchronous Programming Model

4. Basic Xlib Notions

1. The X Display

2. The GC - Graphics Context

3. Object Handles

4. Memory Allocation For Xlib Structures

5. Events

5. Compiling Xlib-Based Programs

6. Opening And Closing The Connection To An X Server

7. Checking Basic Information About A Display

8. Creating A Basic Window - Our "hello world" Program

9. Drawing In A Window

1. Allocating A Graphics Context (GC)

2. Drawing Primitives - Point, Line, Box, Circle...

10. X Events

1. Registering For Event Types Using Event Masks

2. Receiving Events - Writing The Events Loop

3. Expose Events

4. Getting User Input

1. Mouse Button Click And Release Events

2. Mouse Movement Events

3. Mouse Pointer Enter And Leave Events

4. The Keyboard Focus

5. Keyboard Press And Release Events

5. X Events - A Complete Example

11. Handling Text And Fonts

1. The Font Structure

2. Loading A Font

3. Assigning A Font To A Graphics Context

4. Drawing Text In A Window

12. Windows Hierarchy

1. Root, Parent And Child Windows

2. Events Propagation

13. Interacting With The Window Manager

1. Window Properties

2. Setting The Window Name And Icon Name

3. Setting Preferred Window Size(s)

4. Setting Miscellaneous Window Manager Hints

5. Setting An Application's Icon

14. Simple Window Operations

1. Mapping And UN-Mapping A Window

2. Moving A Window Around The Screen

3. Resizing A Window

4. Changing Windows Stacking Order - Raise And Lower

5. Iconifying And De-Iconifying A Window

6. Getting Info About A Window

15. Using Colors To Paint The Rainbow

1. Color Maps

2. Allocating And Freeing Color Maps

3. Allocating And Freeing A Color Entry

4. Drawing With A Color

16. X Bitmaps And Pixmaps

1. What Is An X Bitmap? An X Pixmap?

2. Loading A Bitmap From A File

3. Drawing A Bitmap In A Window

4. Creating A Pixmap

5. Drawing A Pixmap In A Window

6. Freeing A Pixmap

17. Messing With The Mouse Cursor

1. Creating And Destroying A Mouse Cursor

2. Setting A Window's Mouse Cursor

--------------------------------------------------------------------------------

Preface

This tutorial is the first in a series of "would-be" tutorials about graphical programming in the X window environment. By itself, it is useless. A real X programmer usually uses a much higher level of abstraction, such as using Motif (or its free version, lesstiff), GTK, QT and similar libraries. However, we need to start somewhere. More than this, knowing how things work down below is never a bad idea.

After reading this tutorial, one would be able to write very simple graphical programs, but not programs with a descent user interface. For such programs, one of the previously mentioned libraries would be used.

--------------------------------------------------------------------------------

X窗口系统的客户/服务器模式

当初开发X窗口系统的主要目的只有一个,那就是灵活性。这个灵活性的意思就是说一件东西虽然看起来是在这工作,但却实际上是工作在很远的地方。因此,较低等级的实现部分就必须提供绘制窗口,处理用户输入,画画,使用颜色等工作的工具。在这个要求下,决定了系统被分成了两部分,客户端和服务器端。客户端决定做什么,服务器端执行真正的绘图和接受用户的输入并把它发给客户端。

这种模式与我们一般习惯的客户端和服务器端的概念是正

好相反的。在我们的情况下,用户就坐在服务器端控制的机器前,而客户端这时却是运行在远程主机上。服务器端控制着显示屏,鼠标和键盘。一个客户端也许正连接着服务器端,要求给它画一个窗口(或者是一堆),并要求服务器端把用户对它的窗口的输入传给它。结果,好几个客户端可能连接到了一个服务器端上-有的在运行一个电子邮件软件,有的在运行一个网页浏览器等。当用户输入了指令给窗口,服务器端就会把指令打包成事件传给控制那个窗口的客户端,客户端根据接受到的事件决定干什么然后发送请求让服务器端

去画什么。

以上介绍的会话都是通过X消息协议传输的。该协议是实现在TCP/IP协议上的,它允许在一个网络里的客户端访问这个网络里的任何服务器端。最后,X服务器端可以和客户端

运行在同一台机器上以获得性能优化(注意,一个X协议事件可能会达到上百KB),例如使用共享内存,或者使用Unix 域socket(在一个Unix系统的两个进程间创建一个本地通道进行通信的方法)。

--------------------------------------------------------------------------------

图形用户接口(GUI)编程-异步编程模式

不像我们通常的令人愉快的程序,一个GUI程序通常使用异步编程模式,也就是下面要介绍的"事件驱动编程"。这个"事件驱动编程"的意思是说程序通常都处于空闲状态,等待从X服务器发来的事件,等收到了事件,才根据事件做相应的事情。一个事件可能是"用户在屏幕某处x,y点击了鼠标左键",或者是"你控制的窗口需要被重画"。因为程序要回应用户的请求,同时还需要刷新自己的请求队列,因此需要程序尽可能使用较短的事件来处理一个事件(例如,作为一条公认的准则,不能超过200毫秒)。

这也暗示着当然存在需要程序处理很长时间才能完成的事件(例如一个到远程服务器的网络连接,或者是连接一个数据库,或者是不幸的要处理一个超大文件的复制工作)。这都要求程序使用异步方式来处理而不是通常的同步方式。这时候就应该采用各种各样的异步编程方法来进行这些耗时的工作了,或者干脆把它们交给一个线程或进程来进行。

根据以上的说明,一个GUI程序就应该像以下的方式来工作:

进行初始化工作

连接X服务器

进行与X相关的初始化工作

进行循环

从X服务器那里接受下一个事件

根据收到的事件发送各种绘图指令给X服务器

如果事件是个退出事件,结束循环

关闭与X服务器的连接

进行资源释放工作

--------------------------------------------------------------------------------

Xlib的基本思想

X协议是非常复杂的,为了大家不用再辛辛苦苦把时间浪费在实现它上面,就有了一个叫"Xlib"的库。这个库提供了访问任何X服务器的非常底层的手段。因为X协议已经被标准化了,理论上客户程序使用任何Xlib的实现都可以访问任何X服务器。在今天,这看起来可能很琐碎,但如果回到那个使用字符终端和专有绘图方法的时代,这应该是一个很大的突破吧。实际上,你很快发现围绕瘦客户机,窗口终端服务器等领域会有许多多么令人兴奋的事情。

--------------------------------------------------------------------------------

X显示

使用XLib的基本思想就是X显示。它代表了一个打开的到X服务器的连接的结构。它隐藏了一个保存有从X服务器来的事件的队列,和一个保存客户程序准备发往服务器的请求队列。在Xlib里,这个结构被命名为显示"Display"。

当我们打开了一个到X服务器的连接,库就会返回一个指向这个结构的指针。然后,我们就可以使用这个指针来使用Xlib里各种各样的函数。

--------------------------------------------------------------------------------

GC - 图形上下文

当我们进行各种绘图操作(图形,文本等)的时候,我们也许会使用许多参数来指定如何绘制,前景,背景,使用什么颜色,使用什么字体等等,等等。为了避免为每个绘图函数设置数量惊人的参数,我们使用一个叫"GC"的图形上下文结构。我们在这个结构里设置各种绘图参数,然后传给绘图函数就行了。这应当是一个非常方便的方法吧,尤其当我们在进行一连串操作中使用相同的参数时。

--------------------------------------------------------------------------------

对象句柄

当X服务器为我们创建了各种各样的对象的时候- 例如窗口,绘图区和光标- 相应的函数就会返回一个句柄。这是一个存在在X服务器空间中的对象的一个标识-而不是在我们的应用程序的空间里。在后面我们就可以使用Xlib的函数通过句柄来操纵这些对象。X服务器维护了一个实际对象到句柄的映射表。Xlib提供了各种类型来定义这些对象。虽然这些类型实际上只是简单的整数,但我们应该继续使用这些类型的名字- 理由是为了可移植。

--------------------------------------------------------------------------------

Xlib结构的内存分配

Xlib的接口使用了各种类型的结构。有些可以由用户直接来分配内存,有些则只能使用专门的Xlib库函数来分配。在使用库来分配的情况,库会生成有适当初始参数的结构。这对大家来说是非常方便的,指定初始值对于不太熟练的程序员来说是非常头疼的。记住-Xlib想要提供非常灵活的功能,这也就意味着它也会变得非常复杂。提供初始值设置的功能将会帮助那些刚开始使用X的程序员们,同时不会干扰那些高高手们。

在释放内存时,我们使用与申请的同样方法来释放(例如,使用free()来释放malloc()申请的内存)。所以,我们必须使

用XFree()来释放内存。

事件

一个叫"XEvent"的结构来保存从X服务器那里接受到的事件。Xlib提供了非常大量的事件类型。XEvent包括事件的类型,以及与事件相关的数据(例如在屏幕什么地方生成的事件,鼠标键的事件等等),因此,要根据事件类型来读取相应的事件里的数据。这时,XEvent结构使用c语言里的联合来保存可能的数据(如果你搞不清楚c的联合是怎么回事,那你就得花点时间再读读你的教科书了)。结果,我们就可能受到XExpose事件,一个XButton事件,一个XMotion事件等等。

--------------------------------------------------------------------------------

编译基于Xlib的程序

编译基于Xlib的程序需要与Xlib库连接。可以使用下面的命令行:

cc prog.c -o prog -lX11

如果编译器报告找不到X11库,可以试着加上"-L"标志,像这样:

cc prog.c -o prog -L/usr/X11/lib -lX11

或者这样(针对使用X11的版本6)

cc prog.c -o prog -L/usr/X11R6/lib -lX11

在SunOs 4 系统上,X的库被放到了/usr/openwin/lib

cc prog.c -o prog -L/usr/openwin/lib -lX11

等等,具体情况具体分析

--------------------------------------------------------------------------------

打开,关闭到一个X服务器的连接

一个X程序首先要打开到X服务器的连接。我们需要指定运行X服务器的主机的地址,以及显示器编号。X窗口允许一台机器开多个显示。然而,通常只有一个编号为"0"的显示。如果我们想要连接本地的显示(例如进行显示的机器同时又是客户程序运行的机器),我们可以直接使用":0"来连接。现在我们举例,连接一台地址是"simey"的机器的显示,我们可以使用地址"simey:0",下面演示如何进行连接

#include /* defines common Xlib functions and structs. */

.

.

/* this variable will contain the pointer to the Display structure */

/* returned when opening a connection. */

D

Linux系统操作员复习题

Linux操作员认证模拟 题 题目注销虚拟控制台的命令 答案 a 选项A [Ctrl]-[D] 选项B [Ctrl]-[C] 选项C [Ctrl]-[V] 选项D [Ctrl]-[A] 题目要关闭虚拟控制台时在shell 提示下键入()命令 答案 b 选项A quit 选项B exit 选项C halt 选项D close 题目哪个不是ls命令的选项()答案 c 选项A a 选项B l 选项C w 选项D r 题目与head命令相反的命令是()答案 b 选项A cat 选项B tail 选项C locate 选项D cd 题目下列哪一个命令是用来查找指定字串()答案 a 选项A grep 选项B clear 选项C tail 选项D ls 题目在字符界面环境下注销控制 台,可用() 答案 c 选项A exit或quit 选项B quit或ctrl+D 选项C exit或ctrl+D 选项D 以上都可 题目在RedHat Linux安装的界面 上,可选择的安装方式有() 答案 c 选项A 功能键安装与图形模式安装 选项B 功能键安装与文本模式安装 选项C 文本模式安装与图形模式安 装 选项D 题目使用命令chmod的数字设置, 可以改变() 答案 c 选项A 文件的访问特权 选项B 目录的访问特权 选项C 文件/目录的访问特权 选项D 题目主机通过局域网直接接入 Internet,应该配置() 答案 d 选项A IP地址 选项B 子网掩码 选项C 默认网关和DNS服务器的IP 地址 选项D 以上选项都是 题目RedHat Linux安装过程中, 如果以图形化模式安装可按( )键 答案 a 选项A 按回车键 选项B 输入:"linux text" 选项C 输入:"linux askmethod" 选项D 按:"F5" 题目RedHat Linux的安装过程 中磁盘分区选项中不包括() 答案 b 选项A 自动分区 选项B 选择分区 选项C Disk Druid来手工分区 选项D 题目安装程序提供了两个引导装 载程序() 答案 c 选项A GROUP和LLTO 选项B DIR和COID 选项C GRUB和LILO 选项D 题目命令cp与DOS下什么命令 等同() 答案 b 选项A CUP 选项B COPY 选项C CCP 选项D CORP 题目cat命令经常和什么命令搭配 答案 d 选项A much 选项B very 选项C easy 选项D more 题目cat命令是下面哪一个单词的 缩写() 答案 b 选项A CONT 选项B CONCATENATE 选项C COPY 选项D CID 题目clear命令的作用() 答案 a 选项A 清除终端窗口 选项B 关闭终端窗口 选项C 打开终端窗口 选项D 调整窗口大小 题目面那一组命令是用于压缩或 解压缩文件() 答案 b 选项A compress,uncompress 选项B gzip,gunzip 选项C ppt,ftp 选项D haccp,file 题目下面那一组命令是用于压缩 或解压缩数据() 答案 a

2016Linux程序设计复习题

一、填空题 1、在Linux 系统中,以文件方式访问设备。 2、Linux 内核引导时,从文件/etc/fstab 中读取要加载的文件系统。 3、Linux 文件系统中每个文件用i 节点来标识。 4、全部磁盘块由四个部分组成,分别为引导块、专用块、i 节点表块和数据存储块。 5、链接分为:硬链接和符号链接。 6、超级块包含了i 节点表和空闲块表等重要的文件系统信息。 7、某文件的权限为:drw-r--r-- ,用数值形式表示该权限,则该八进制数为:644 ,该文件属性是目录。 8、前台起动的进程使用Ctrl+C 终止。 9、静态路由设定后,若网络拓扑结构发生变化,需由系统管理员修改路由的设置。 10、网络管理的重要任务是:控制和监控。 11、安装Linux 系统对硬盘分区时,必须有两种分区类型:文件系统分区和交换分区。 12、编写的Shell 程序运行前必须赋予该脚本文件执行权限。 13、系统管理的任务之一是能够在分布式环境中实现对程序和数据的安全 保护、备份、恢复和更新。 14、系统交换分区是作为系统虚拟存储器的一块区域。 15、内核分为进程管理系统、内存管理系统、I/O 管理系统和文件管理系统等四个子系统。 16、内核配置是系统管理员在改变系统配置硬件时要进行的重要操作。 17、在安装Linux 系统中,使用netconfig 程序对网络进行配置,该安装程序会一步步提示用 户输入主机名、域名、域名服务器、IP 地址、网关地址和子网掩码等必要信息。 18、唯一标识每一个用户的是用户ID 和用户名。 19、RIP 协议是最为普遍的一种内部协议,一般称为动态路由选择协议。 20、在Linux 系统中所有内容都被表示为文件,组织文件的各种方法称为文件系统。 21、DHCP可以实现动态IP 地址分配。 22、系统网络管理员的管理对象是服务器、用户和服务器的进程以及系统的各种资源。 23、网络管理通常由监测、传输和管理三部分组成,其中管理部分是整个网络管理的 中心。 24、当想删除本系统用不上的设备驱动程序时必须编译内核,当内核不支持系统上的 设备驱动程序时,必须对内核升级。 25、Ping 命令可以测试网络中本机系统是否能到达一台远程主机,所以常常用于测试网络 的连通性。 26、vi 编辑器具有三种工作模式:命令模式、底行模式和输入模式。 27、可以用ls –al 命令来观察文件的权限,每个文件的权限都用10 位表示,并分为四段, 其中第一段占 1 位,表示文件类型,第二段占 3 位,表示文件所有者对该文件的权限。 28、进程与程序的区别在于其动态性,动态的产生和终止,从产生到终止进程可以具有的基 本状态为:运行态、就绪态和等待态(阻塞态)。 29、DNS实际上是分布在internet 上的主机信息的数据库,其作用是实现IP地址和主

实验四 Linux输入输出管理

实验四、Linux输入输出管理 一、实验目的 通过实验理解Linux的标准输入输出设备,了解Linux的窗口管理器,体验Linux系统下的USB 存储设备管理,掌握Linux的输入输出重定向和管道操作。 二、实验内容与步骤 预习背景知识,理清相关概念。 1、熟悉GNOME 开机启动,登录Red Hat Linux系统; GNOME桌面最强大的功能就是能够自由配置,并且执行任务有多种方式。GNOME桌面的组件可共同使用。通常,可以用几种不同的方式执行相同的操作。例如,既可以从面板启动应用程序,也可以从菜单或桌面启动应用程序。 GNOME桌面包含专用的首选项工具。每一个工具控制GNOME桌面行为的一个特定部分。要启动首选项工具,请从“主菜单”中选择“首选项”。从子菜单中选择要配置的项目。 在GNOME环境中执行下面的步骤。 (1)练习使用GNOME面板 GNOME面板左下方有若干个图标。移动鼠标光标停留在这些图标上一到两秒钟, 可看到关于它们的操作提示。请将观察结果记录在表4-1中。 (2)显示面板主菜单 GNOME面板左端有一个带箭头的主菜单按钮。单击并记录主菜单标题,填入表4-2。 (3)打开和最小化/最大化一个视窗 单击面板上的文字处理器图标,打开一个文字处理视窗。在打开文字处理视窗之后,可以单击右上角的按钮选择最小化、最大化或者还原。 (4)改变视窗的大小 把鼠标光标移动到视窗的任何一边,可以看到一个箭头标志。当该标志出现的时候按下鼠标左键不放,然后拖动视窗的边界可以迸行缩放。 (5)移动视窗 单击视窗的标题栏保持不放。拖动视窗到一个新的位置。 (6)处理重叠视窗 在文字处理视窗打开的情况下,打开新的视窗会重叠或者覆盖住文字处理视窗。新打开的视窗现在成为前端视窗或者说是当前进程。为了把文字处理视窗从底层带到顶层来,可单击能够看见的视窗的任何部分。如果看不到,则可单击前面视窗的左上角符号,打开“窗口菜单”,从中选择需要的视窗。 (7)关闭视窗 单击视窗右上角“关闭窗口”按钮,可关闭当前视窗。 (8)处理工作区按钮 ●在工作空间1~4中分别打开不同的任务视窗。 ●单击各个工作区按钮,在4个视窗中切换。 ●关闭每一个视窗中正在运行的应用程序。 2、加载USB存储设备 USB存储设备可以通过终端命令加载。 (1)插人USB存储设备,稍过片刻,打开终端,输入: [root@localhost ~] # fdisk -1

Linux程序设计报告

Linux程序设计课程设计 Linux程序设计课程组 长春工业大学 2017-12-24

课程设计任务书

目录 第1章设计要求 (1) 2.1设计目的 (1) 2.2设计要求 (1) 第2章测试数据设计 (2) 第3章算法实现 (3) 第4章算法结果 (19) 第5章结果可视化 (21) 第6章性能分析 (21) 参考文献 (22) 心得 (22)

第1章设计要求 2.1设计目的 理解临界区和进程互斥的概念,掌握用信号量和PV操作实现进程互斥的方法。 2.2设计要求 在linux环境下编写应用程序,该程序运行时能创建N个线程,其中既有读者线程又有写者线程,它们按照事先设计好的测试数据进行读写操作。 读者/写者问题描述如下: 有一个被许多进程共享的数据区,这个数据区可以是一个文件,或者主存的一块空间,甚至可以是一组处理器寄存器。有一些只读取这个数据区的线程(reader)和一些只往数据区中写数据的线程(writer)。以下假设共享数据区是文件。这些读者和写者对数据区的操作必须满足以下条件:读—读允许;读—写互斥;写—写互斥。这些条件具体来说就是: (1)任意多的读线程可以同时读这个文件; (2)一次只允许一个写线程往文件中写; (3)如果一个写线程正在往文件中写,禁止任何读线程或写线程访问文件; (4)写线程执行写操作前,应让已有的写者或读者全部退出。这说明当有读者在读文件时不允许写者写文件。 对于读者-写者问题,有三种解决方法: 1、读者优先 除了上述四个规则外,还增加读者优先的规定,当有读者在读文件时,对随后到达的读者和写者,要首先满足读者,阻塞写者。这说明只要有一个读者活跃,那么随后而来的读者都将被允许访问文件,从而导致写者长时间等待,甚至有可能出现写者被饿死的情况。 2、写者优先 除了上述四个规则外,还增加写者优先的规定,即当有读者和写者同时等待时,首先满足写者。当一个写者声明想写文件时,不允许新的读者再访问文件。 3、无优先 除了上述四个规则外,不再规定读写的优先权,谁先等待谁就先使用文件。

中南大学linux程序设计环境实验四(DOC)

实验4 Linux 高级程序设计 1、实验目的 (1) 了解Linux操作系统下应用程序开发流程 (2) 掌握gun工具链的使用 (3) 了解Linux高级编程技巧(例如IPC机制、系统调用等) 2、实验内容 (1) 编写一个简单的C语言程序,编写Makefile文件。了解编译过程,并用gdb进行调试。 (2) 编写一段程序,适用系统调用fork( )创建两个新的子进程,此程序运行使系统中有三个活动进程存在。控制让一个进程在屏幕上显示一个字符:父进程显示“a”,子进程分别显示字符“b”和字符“c”。试观察屏幕上的显示结果,并对输出结果进行分析。在实验报告中写出说明和分析。 (3) 编写一段程序实现父进程创建一个子进程,通过系统调用使子进程和父进程执行不同的任务。(提示:利用system(), exec系列函数) 试思考,怎样实现进程间的同步? (4) 编写一段C程序完成:父进程创建一个子进程,父进程对子进程设置一个报警信号,然后父进程等待子进程的结束,如果此时报警信号先到,就终止子进程。 3、实验要求 (1) 写出源程序,并编译运行 (2) 详细记录程序调试及运行结果 4、实验思路及过程 (1)

makefile文件: main.c文件:

1.c文件: 2.c文件: -o写成-c,函数库导入不正确:

(2)

出现acb的结果:p1=fork()会创建一个新的进程,父进程遇到p2=fork()创建又一个新的进程,此时,父进程运行完毕输出a,p2=fork()创建的子进程运行完毕输出c,最后p1=fork()创建的子进程运行完毕输出b; 出现abc的结果:p1=fork()会创建一个新的进程,父进程遇到p2=fork()创建又一个新的进程,此时,父进程运行完毕输出a,p1=fork()创建的子进程运行完毕输出b,最后p2=fork()创建的子进程运行完毕输出c;

Linux输入输出重定向的原理和实现

Linux I/O重定向的原理和实现 在Unix系统中,每个进程都有STDIN、STDOUT和STDERR这3种标准I/O,它们是程序最通用的输入输出方式。几乎所有语言都有相应的标准I/O函数,比如,C语言可以通过scanf从终端输入字符,通过printf向终端输出字符。熟悉Shell的朋友都知道,我们可以方便地对Shell命令进行I/O重定向,比如find -name "*.java" >testfile.txt 把当前目录下的Java文件列表重定向到testfile.txt。多数情况下,我们只需要了解I/O重定向的使用就够了,但是如果要编程实现类似Shell的I/O重定向以及管道功能,那么就需要清楚它的原理和实现。 下面本文就以Linux系统为具体例子,介绍I/O重定向的原理和实现(文中实验环境为Ubuntu 12.04,内核版本3.2.0-59)。 文件描述符表 理解I/O重定向的原理需要从Linux内核为进程所维护的关键数据结构入手。对Linux 进程来讲,每个打开的文件都是通过文件描述符(File Descriptor)来标识的,内核为每个进程维护了一个文件描述符表,这个表以FD为索引,再进一步指向文件的详细信息。在进程创建时,内核为进程默认创建了0、1、2三个特殊的FD,这就是STDIN、STDOUT和STDERR,如下图所示意: 所谓的I/O重定向也就是让已创建的FD指向其他文件。比如,下面是对STDOUT重定向到testfile.txt前后内核文件描述符表变化的示意图 重定向前:

重定向后: 在I/O重定向的过程中,不变的是FD 0/1/2代表STDIN/STDOUT/STDERR,变化的是文件描述符表中FD 0/1/2对应的具体文件,应用程序只关心前者。本质上这和接口的原理是相通的,通过一个间接层把功能的使用者和提供者解耦。 下面我们通过strace命令跟踪一下echo命令的系统调用: dagang@ubuntu12:~$ strace echo hello 2>&1 >/dev/null | grep write write(1, "hello\n", 6) = 6 我们可以看到write(1, "hello\n", 6) 这样一个系统调用,它的第一个参数1就是代表的STDOUT的FD,这说明对于echo程序,它只管(通过标准I/O函数从STDOUT)向FD 1写入,而不关心它们FD 1到底对应的是哪个文件。 Shell正是通过I/O重定向和管道这种特殊的文件把多个程序的STDIN和STDOUT串联在一起组成更复杂功能的,下面是Shell中通过管道的示意图: 下面我们用一个实际的例子来体验一下: dagang@ubuntu12:~$ sleep 30 | sleep 40 & [1] 5584 dagang@ubuntu12:~$ pgrep -l sleep 5583 sleep 5584 sleep dagang@ubuntu12:~$ ll /proc/5583/fd total 0 lrwx------ 1 dagang dagang 64 Feb 27 13:41 0 -> /dev/pts/3 l-wx------ 1 dagang dagang 64 Feb 27 13:41 1 -> pipe:[246469] lrwx------ 1 dagang dagang 64 Feb 27 13:41 2 -> /dev/pts/3 dagang@ubuntu12:~$ ll /proc/5584/fd

浙江大学Linux程序设计实验报告

Linux程序设计实验报告1 ——操作系统基本命令使用 一、实验目的 1.通过对Emacs、vi、vim、gedit文本编辑器的使用,掌握在Linux环境下文本文件的编辑方法; 2.通过对常用命令mkdir、cp、cd、ls、mv、chmod、rm等文件命令的操作,掌握Linux操作系统中文件命令的用法。 二、实验任务与要求 1.emacs的使用,要求能新建、编辑、保存一个文本文件 2.vi或vim的使用,要求能新建、编辑、保存一个文本文件 3.gedit的使用,要求能新建、编辑、保存一个文本文件 4.掌握mkdir、cd命令的操作,要求能建立目录、进入与退出目录 5.掌握cp、ls、mv、chmod、rm命令的操作,要求能拷贝文件、新建文件、查看文件、文件重命名、删除文件等操作。 三、实验工具与准备 计算机PC机,Linux Redhat Fedora Core6操作系统 四、实验步骤与操作指导 任务1.学习emacs的使用,要求能新建、编辑、保存一个文本文件 (1)启动emacs (2)输入以下C程序 (3)保存文件为kk.c (4)用emacs打开文件kk.c (5)修改程序 (6)另存为文件aa.txt并退出。 任务2.vi或vim的使用,要求能新建、编辑、保存一个文本文件 (1)点击”应用程序”→ “附件”→“终端”,打开终端,在终端输入命令: [root@localhost root]#vi kk.c 按i键,进入插入状态。 (2)输入以下C程序 #include int main( ) {

printf(“Hello world!\n”); return 0; } 此时可以用Backspace、→、←、↑、↓键编辑文本。 (3)保存文件为kk.c 按Esc键,进入最后行状态,在最后行状态输入:wq保存文件,退出vi。 (4)用vi打开文件kk.c,输入命令: [root@localhost root]#vi kk.c (5)修改程序为: #include int main( ) { printf(" Hello world!\n"); printf("*****************\n"); return 0; } (6)按Esc键,进入最后行状态,在最后行状态输入:wq aa.txt保存文件,如图1所示,另存为文件aa.txt并退出vi。。 图1 程序编辑环境 任务3.gedit的使用,要求能新建、编辑、保存一个文本文件 (1)启动gedit,点击”应用程序”→ “附件”→“文本编辑器”,打开文本编辑器,如图所示。

Linux基础操作练习题

Linux基础操作练习题 姓名:古慧班级:09软件学号:20090300430117 二、问答题 1.使用什么命令在Linux文件系统的不同目录之间切换,如何显示当前所有的目录? 答:在Linux文件系统的不同目录之间切换的命令是cd, 显示当前所有的目录的命令是pwd。 2.使用什么命令列出当前目录中的文件和子目录名? 答:使用ls 命令将列出当前目录中的文件和子目录名。 使用dir或vdir命令也可以列出目录中的文件清单。使用上与ls命令类似。 3.使用什么命令把两个文件合并成一个文件? 答:cat命令可用来进行文件的合并、建立、覆盖或者添加内容等操作。 4.有哪些命令可用来查看文件的内容,这些命令有什么不同? 答:cat命令用来把文件内容显示到屏幕上,还用来进行文件的合并、建立、覆盖或者添加内容等操作。 more命令可以在浏览文件的时候前后翻页,在阅读长文本时特别有用。 less命令比more命令功能更强,是许多程序(比如man命令等)使用的缺省的阅读命令。less 的输出结果可以向前或向后翻页,但是 more 仅能向前 翻页。 head和tail命令用来阅读文件的开头或者结尾的部分。加上参数-n x 可以指定查看x 行。 5.新建、移动、删除和复制文件使用什么命令? 答:Cat、touch命令可用来建立文件。 rm命令可以用来删除文件和目录。 mv命令用于文件改名,也可以用来在文件系统内移动文件或者子目录。 cp命令用来对文件进行复制操作。 6. 新建、移动、删除和复制目录使用什么命令? 答:mkdir命令用于建立子目录。此命令可以一次建立多个子目录。 mv命令用于文件改名,也可以用来在文件系统内移动文件或者子目录。 rm命令可以用来删除文件和目录。 rmdir命令用来删除空子目录。 cp命令用来对子目录进行复制操作。 7.使用什么命令统计文件中的信息? 答:命令file用来确定文件的类型。使用此命令时,可以指定一个或多个文件名。 wc命令可以统计指定文件中的字节数、字数、行数, 并将统计结果显示在屏幕上。 8.标准输入和标准输出指什么?输出重定向和输入重定向指什么? 答:标准输入文件(stdin),通常对应终端的键盘; 标准输出文件(stdout),这个文件都对应终端的屏幕。 进程将从标准输入文件中得到输入数据,将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件中。

Linux程序设计模式(机制与策略)

Linux程序设计模式—机制与策略 什么是设计模式(Design pattern)? 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、软件设计经验的总结。使用设计模式是为了提高代码或模块的重用、让程序更容易被他人理解、提高代码可靠性和可维护性。同时,通过学习设计模式可以降低解决一般性问题的开发难度。 Linux程序设计模式的起源和发展 Linux程序的设计模式起源于Unix文化,是Unix哲学的重要组成部分,而Linux本身就是Unix的一个发展分支。Unix哲学说来不算是一种正规设计方法,它是自下而上的,而不是自上而下的。Unix哲学注重实效,立足于丰富的经验。你不会在正规方法学和标准中找到它,它更接近于隐性的半本能的知识,即Unix文化所传播的专业经验。它鼓励那种分清轻重缓急的感觉,以及怀疑一切的态度,并鼓励你以幽默达观的态度对待这些。 什么是Unix哲学? Unix管道的发明人、Unix传统的奠基人之一Doug McIlroy在[McIlroy78]中曾经说过: I. 让每个程序就做好一件事。如果有新任务,就重新开始,不要往原程序中加入新功能而搞得复杂。 II. 假定每个程序的输出都会成为另一个程序的输入,哪怕那个程序还是未知的。输出中不要有无关的信息干扰。避免使用严格的分栏格式和二进制格式输入。不要坚持使用交互式输入。 III. 尽可能早地将设计和编译的软件投入试用, 哪怕是操作系统也不例外,理想情况下, 应该是在几星期内。对拙劣的代码别犹豫,扔掉重写。 IV. 优先使用工具而不是拙劣的帮助来减轻编程任务的负担。工欲善其事,必先利其器。后来他这样总结道(引自《Unix的四分之一世纪》): Unix哲学是这样的:一个程序只做一件事,并做好。程序要能协作。程序要能处理文本流,因为这是最通用的接口。 从整体上来说,可以概括为以下几点: 01.模块原则:使用简洁的接口拼合简单的部件。 02.清晰原则:清晰胜于机巧。 03.组合原则:设计时考虑拼接组合。 04.分离原则:策略同机制分离,接口同引擎分离。 05.简洁原则:设计要简洁,复杂度能低则低。 06.吝啬原则:除非确无它法,不要编写庞大的程序。 07.透明性原则:设计要可见,以便审查和调试。 08.健壮原则:健壮源于透明与简洁。 09.表示原则:把知识叠入数据以求逻辑质朴而健壮。 10.通俗原则:接口设计避免标新立异。 11.缄默原则:如果一个程序没什么好说的,就沉默。 12.补救原则:出现异常时,马上退出并给出足够错误信息。 13.经济原则:宁花机器一分,不花程序员一秒。 14.生成原则:避免手工hack,尽量编写程序去生成程序。 15.优化原则:雕琢前先要有原型,跑之前先学会走。 16.多样原则:决不相信所谓“不二法门”的断言。 17.扩展原则:设计着眼未来,未来总比预想来得快。 给大家推荐一本书《UNIX 编程艺术》————这不是一本讲如何编程的书,而是一本讲UNIX设计哲学的书,当然也适应于Linux。这本书是我来威胜工作后,同事们推荐我读的第二

《Linux编程环境》样题及参考答案

《Linux编程环境》期末考试样题 一.(共20分,每小题2分)给出完成下列各项功能所需要命令。陈述利用了该命令的哪个功能或选项。 1.如何得知命令netstat众多选项中哪个选项可以打印出IP路由表? 答:使用man命令,man命令可以在线查阅命令的使用手册,使用命令man netstat查出netstat命令的使用手册,看看哪个选项和什么命令格式用来打印出ip的路由表。 2.删除文件名为-f的文件。 答:使用rm命令,由于命令会默认以减号开始的命令行参数为命令处理的选项而不是处理对象,所以需要使用特殊的选项--以显式的方式说明选项的结束。命令为rm -- -i 3.在你完成上机作业过程中,使用什么命令将源程序文件mylist.c编译、 链接生成可执行文件?可执行文件是什么名字?如何运行? 答:使用gcc命令或者make,实现编译和链接 gcc mylist.c –o mylist 或者:make mylist 生成的可执行文件名按照惯例为mylist,一般情况下当前环境变量 PATH不包括当前目录,所以,运行这个可执行程序应当加上当前路径,命令为:./mylist 4.去掉文件list.txt中的所有空行(所谓空行指:行内不含有任何除空格之 外的字符),存为新文件list-new.txt。 答:使用grep命令可以用正则表达式对文本文件过滤,-v选项用于筛选掉能匹配指定正则表达式的行,描述一个空行的正则表达式为^ *$,即:从行首开始(^),有零个到多个空格( *),然后是行尾($),命令为: grep –v ’^ *$’ list.txt > list-new.txt 5.检索目录src以及其子孙目录中的所有文件名后缀为.c和.h文件,查找 哪些文件中含有字符串TPDU,并列出在这文件中的行号。 答:使用find命令和grep命令。find命令可以在指定的目录树中查找满足某个条件的文件或目录,并对查找到的满足条件的对象执行一个动作。指定查找条件为“文件名后缀为.c和.h”,动作为“查找哪些文件中含有字符串TPDU,并列出在这文件中的行号”,分别是find的 -name和-exec选项。完整的命令为: find src –name ”*.[ch]”–exec grep –n TPDU {} /dev/null \;

linux题库填空简答及标准答案

linux题库填空简答及答案

————————————————————————————————作者:————————————————————————————————日期:

二、填空题 26. 在Linux系统中,以_文件的_方式访问设备。 27. Linux内核引导时,从文件_/etc/fstad___中读取要加载的文件系统。 28. Linux文件系统中每个文件用__i节点_____来标识。 29. 某文件的权限为:d-rw-_r--_r--,用数值形式表示该权限644,该文件属性是目录。 30. 静态路由设定后,若网络拓扑结构发生变化,需由__系统管理员___修改路由的设置。 31. 网络管理的重要任务是:__控制___和_监控_______。 32. 安装Linux系统对硬盘分区时,必须有两种分区类型:文件系统分区___ 和___交换分区________。 33. 编写的Shell程序运行前必须赋予该脚本文件__执行___权限。 二、填空题(每题2分,共20分) 1.安装Linux系统对硬盘分区时,必须有两种分区类型:Linux原始分区(根分区) 和Linux 交换分区。 2.在Linux的两种链接文件中,只能实现对文件链接的一种方式是:软链接(符号链接)。3.Linux主要采用了请求调页和写时复制 _两种动态内存管理技术实现了物理内存以On demand方式动态分配。 4.对于System V类型的共享内存页面,Linux基于__Clock____算法决定哪些页面应当被换出物理内存。 5.在Linux与中断相关的三个核心数据结构中,用做抽象的中断控制器的数据结构是_ hw_interrupt_type _____,它包含一系列处理中断控制器特有的操作。 6. 通过将_ request _____动态链入块设备控制结构blk_dev_struct,Linux设备管理器有 效的实现了物理设备和缓冲区之间的异步读写通讯。 7.将/home/stud1/wang目录做归档压缩,压缩后生成wang.tar.gz文件,并将此文件保存到/home目录下,实现此任务的tar命令格式__tar czvf wang.tar.gz /home/stud1/wang____。 8.对于给定的文件file,统计其中所有包含字符串”WHU”的行数的一条命令是_grep WHU file | wc -l 9. 对于Shell脚本程序,若输入参数数量多于9个,则程序遍历每个参数可通过使用 __shift__命令实现。 10.在System V进程通讯方式中,ipc_perm结构描述对一个系统IPC对象的存取权限,而用于定位IPC对象的引用标志符key可以依据键值分成_公有____和___私有___两种类型。 二、填空题(每空1分,共20分) 1.在Linux2.4.0版本中,进程有 ___6___ 种状态,进程使用 __exit____ 系统调用后进入僵死状态。 2.在Linux 中,管道分为 __2____ 种类型,若创建或打开管道时获得的描述符存放在fd 中,则fd[1]是 _管道写描述符_ 。 3.Linux为用户提供的接口有 shell、XWINDOW、系统调用 4.Linux在I386体系结构中支持 __两级____分页机构。 5.每个设备文件名由主设备号和从设备号描述。第二块IDE硬盘的设备名为__hdb____,它上面的第三个主分区对应的文件名是 __hdb3____ 。 6. 超级块是描述 __文件系统属性____ 信息的数据结构,索引节点是描述 __文件属性____

Linux程序设计考试例题

例题1程序A生成1个文件,其大小为1000字节,其内容为小写字母abcd...z的循环。试编写该程序。 文件名t 1.c #include #include int main(){char x; int i; int fd=open("aa",O_CREAT|O_TRUNC|O_WRONLY,0666); if(fd<0){printf("open file error!\r\n");exit (0);}; for(i=0;i<1000;i++){x='a'+(i%26); write(fd,&x,1);}close(fd);}例题2读出一个文件a.txt的倒数第2个字节和倒数第1个字节,显示在屏幕上。并且显示出当前时间。 文件名t 2.c #include #include #include int main(){char x[2]; int fd=open("a.txt",O_RDONLY); if(fd<0){printf("open file error!\r\n");exit

lseek(fd,-3,SEEK_END); read(fd,x,2); printf("倒数第二和第一字节为%c%c\r\n",x[0],x[1]); close(fd); time_t t; time(&t); printf("当前时间: %s",asctime(localtime(&t)));}例题3产生一个进程树父进程有3个子进程,这三个子进程分别有2个子进程。每个进程退出前打印自己的进程id号 文件名t 3.c #include #include int main(){int ret,i; for(i=0;i<3;i++){ret=fork(); if(ret==0)break;}if(ret==0) for(i=0;i<2;i++){ret=fork(); if(ret==0)break;}sleep (10); printf("thread %d is exiting now \r\n",getpid());}测试方法: 在另一窗口

Linux字符界面切换到图形界面

Linux字符界面切换到图形界面 由字符界面切换到图形界面可用两种简单方法实现: 1、在字符界面输入startx或init 5 。 2、通过编辑/etc/inittab文件实现默认进入图形界面。 把其中的id:3:initdefault中的3改为5,这样以后系统启动后将直接进入文本模式。 以下是配置引导进入图形模式的etc/inittab文件的部分内容: #Default runlevel.The runlevels used by RHS are: # 0-halt(Do NOT set initdefault to this) # 1 -Single user mode # 2-Multiuser,without NFS(The same as 3,if you do not have networking) # 3-Full multiuser mode # 4-unused # 5-X11 //选择此项,系统在登录时将进入图形化登录界面 # 6-reboot(Do NOT set initdefault to this) # id:3:initdefault: //此处若改为3,系统将被引导进入文本登录提示符界面 linux切换到图形界面与多种模式 1.开机进入文本模式 如果想让开机自动进纯文本模式,修改/etc/inittab,找到其中的id:5:initdefault:,这行指示启动时的运行级是5,也就是图形模式,改成3就是文本模式了id:3:initdefault:,这是因为Linux操作系统有六种不同的运行级(run level),在不同的运行级下,系统有着不同的状态,这六种运行级分别为: 0:停机(记住不要把initdefault 设置为0,因为这样会使Linux无法启动) 1:单用户模式,就像Win9X下的安全模式。 2:多用户,但是没有NFS 。 3:完全多用户模式,标准的运行级。 4:一般不用,在一些特殊情况下可以用它来做一些事情。 5:X11,即进到X-Window 系统。 6:重新启动(记住不要把initdefault 设置为6,因为这样会使Linux不断地重新启动)。其中运行级3就是我们要进入的标准Console字符界面模式。 2.强行退出X-Window进入文本模式 打开一个终端,输入init 3,(注意init后面有一个空格),等一会就进入了图形界面,以上方法切换后,窗口模式完全关闭.如果窗口中有文件未保存,将丢失.(用init 5可以回到图形界面,但原来的进程已死) 方法1:运行命令 #startx ,需要先配置图形界面信息,(暂时不会~); 方法2:修改/etc/inittab文件中的 id:3:initdefault ,将3改为5 ,重新启动系统; linux字符界面和图形界面切换 Linux忘记root密码怎么办?

Linux复习题(附答案)

一、填空 1、在Linux系统中,以(文件)的方式访问设备。 2、Linux内核引导时,从文件(/etc/fstab)中读取要加载的文件系统。 3、Linux文件系统中每个文件用(inode)来标识。 4、某文件的权限为:d-rw-_r--_r--,用数值形式表示该权限(644),该文件属性是(目录)。 5、安装Linux系统对硬盘分区时,必须有两种分区类型:(文件系统分区)和(交换分区)。 6、编写的Shell程序运行前必须赋予该脚本文件(执行)权限。 7、FreeSoftware的含义是(自由软件) 8、(startx)命令可以用来启动X Window 9、用户编写了一个文本文件a.txt,想将该文件名称改为txt.a,可用命令(cat a.txt > txt.a) 10、Linux文件权限一共10位长度,分成四段,第三段表示的内容是(文件所有者所在组的权限)。 11、某文件的组外成员的权限为只读;所有者有全部权限;组内的权限为读与写,则该文件的权限为(764)。 12、将/home/stud1/wang目录做归档压缩,压缩后生成wang.tar.gz文件,并将此文件保存到/home目录下,实现此任务的tar命令是 (tar zcvf wang.tar.gz /home/stud1/wang)。 13、对于给定的文件file,统计其中所有包含字符串”WHU”的行数的一条命令是(grep WHU file | wc -l ) 14、为卸载一个软件包,应使用(rpm –e)。 15、每个设备文件名由主设备号和从设备号描述。第二块IDE硬盘的设备名为(hdb),它上面的第三个主分区对应的文件名是(hdb3)。 16、vi编辑器有(3)种工作模式,分别是(命令模式、输入模式、末行模式)。 17、设定限制用户使用磁盘空间的命令是(quota )。 18、在Linux系统中,用来存放系统所需要的配置文件和子目录的目录是(/etc )。 19、将前一个命令的标准输出作为后一个命令的标准输入,称之为(管道)。 20、为脚本程序指定执行权的命令及参数是( chmod a+x filename )。 21、进行字符串查找,使用(grep )命令。 22、在/dir1不存在的情况下,可以直接使用命令(mkdir –p /dir1/dir2)先后创建/dir1目录以及/dir1/dir2目录。 23、要使得名为fido的文件具有如下权限-r-xr-x—x的命令是:(chmod 551 fido3)。 24、可以使用命令(find /root –name *.cpp)在/root文件夹下查找后缀为.cpp的文件。 25、关闭linux系统(不重新启动)使用的命令(halt) 26、将光盘/dev/hdc卸载的命令是(umount /dev/hdc) 27、shell不仅是(用户命令的解释器),它同时也是一种功能强大的编程语言。 28、将test.tar.gz文件解压缩的命令是:(tar -zxvf test.tar.gz) 29、若当前系统安装的wu-ftpd软件包的版本为wu-ftpd-2.6.1-8.i386.rpm,想升级安装2.6.2版本的wu-ftpd软件包,可以使用命令:(rpm –Uvh wu-ftpd-2.6.2-8.i386.rpm) 30、安装Linux系统,硬盘至少要分二个分区,一个为交换分区,另一个必须挂载到(/ )目录。 31、2.6.17是linux内核的(稳定)版本

(完整word版)Linux操作系统(下)复习题

复习题 一、填空题 1、Linux操作系统是Unix 操作系统的一个克隆版本。 2、Linux的命令运行环境昌Shell,它是一种命令解释器,在用户和操作系统之间提供了一个交互接口。 3、Linux系统中有三个基本的文件类型:普通文件、目录文件和设备文件。 4、Linux系统通过目录将系统中所有的文件分级、分层组织在一起,形成了Linux文件系统的树型层次结构。 5、在Linux系统中建立新目录的命令是mkdir 。 6、Linux编程可分为Shell 编程和高级语言编程。 7、Linux系统提供了许多文本编辑程序,比较常用的有vi 和emacs 等。 8、要使用make,必须编写一个叫Makefile 的文件。 9、autoconf 是一个用于生成可以自动配置软件源代码包以适应多种类Unix系统的shell 脚本的工具。 10、Automake 是一个从文件Makefile.am中自动生成Makefile.in文件的工具。 11、Linux的文件是个简单的字节序列。 12、对于Linux而言,所有对设备和文件的操作都使用文件描述符。 13、调用open 函数可以打开或创建一个文件。 14、设置文件的存取权限,分为属主、组用户和其他用户三类。每类分为读、写和执行权限。 15、第一个进程都有一个目录与之相连,它称为当前工作目录,或简单地称为工作目录。 16、当打开一个流时,标准输入输出函数返回一个FILE结构的指针。 17、在三个流是在执行程序时自动打开的。它们是标准输入、标准输出和标准错误输出。 18、有3种类型的无格式I/O 函数可用来读写流,它们是字符I/O函数、行I/O函数和块I/O函数。 19、每一个流对象内部都保持着两个指示器:一个是错误指示器,当读写文件出错时该指示器被设置;另一个为文件结束指示器,当遇到文件尾时该指示器被设置。 20、流有3种不同的缓冲类型,它们是全缓冲、行缓冲和无缓冲。 21、进程在其生存期内可能处于三种基本状态:运行态、就绪态、等待态。 22、为了让Linux来管理系统中的进程,每个进程用一个task_struct 数据结构来表示。 23、在Linux系统中,进程有两种运行模式:用户模式和系统模式。 24、创建一个新进程的唯一方法是由某个已存在的进程调用fork 或vfork 函数,被创建的新进程称为子进程,已存在的进程称为父进程。 25、系统中的每个进程都有唯一的非负整数作为标识,它被称为进程标识号。 26、进程间通信有如下一些目的:数据传输、共享数据、通知事件、资源共享、进程控制. 27、Linux支持Unix System v中的三种进程间通信机制,它们是:消息队列、信号量、共享内存。

Linux程序设计2018年度-2018年度期末试地的题目部分问题详解小东编辑

兰州商学院2011-2012学年第二学期期末考试 Linux 程序设计 试卷A 一、单项选择题(每小题1分,共计20分) 1. Linux 在确定文件名filename 是否代表目录文件时,依据( C )。 A. 由程序员指定 B. filename 是否位于/etc 目录中 C. 该文件i 结点中的类型信息 D. filename 中的扩展名 2. 在进程p1中用系统函数execvp 执行程序p2,则( D )。 A. p1创建一个子进程执行p2 B. p2结束后返回prog1继续执行 C. p1和p2并行执行 D. p2将替换掉prog1的代码 3. 进程调用wait 将被阻塞,直到( D )。 A. 用户按任意键 B. 收到时钟信号 C. 子进程被创建 D . 子进程结束

4. Shell脚本中的注释用( C )标记。 A. // B. /*…*/ C. # D. * 5. head命令用于( B )。 A. 显示文件的前10行 B. 显示C语言头文件 C. 显示目录的前10行 D. 显示 6. bind调用用于( A )。 A. 为socket分配地址 B. 客户端与服务器连接 C. 接收socket上的连接 D. 监听socket上的连接 7. 一个进程收到SIGCHILD信号,表示( B )。 A. 创建子进程成功 B. 创建子进程失败 C. 子进程结束 D. 子进程开始运行 8. 当客户端用GET命令请求某文件时,Web服务器用返回码( B )表示没有该文件。 A. 200 B. 404 C. 8080. ②exit(0) 9. 删除命名管道的系统调用是( A )。 A. unlink B. close C. fcolse D. dup2 10. 设可能有多个线程调用pthread_cond_wait(&buf_empty, &lock)后等待条件变量 buf_empty,当某线程pt1调用pthread_cond_signal(&buf_empty)后,( B )。 A. 所有等待buf_empty的线程被唤醒 B. 有一个等待buf_empty的线程被唤醒

相关主题
文本预览
相关文档 最新文档