linux系统及编程基础课后答案(5)

2019-01-19 15:52

从运行结果可知父亲进程、女儿进程、儿子进程并发执行。 如果在每个printf后面加上sleep(1),结果如下:

从运行结果可知加上sleep后父进程和两个子进程并发程度更大。

8.编写一个程序,该程序当我们输入Ctrl+C时输出字符串“ I got signal”。在其余的时间,该程序只是无限循环,

每一秒输出一条“hello world”信息。 答:

#include #include #include void ouch(int sig) {

printf(\ (void) signal(SIGINT,SIG_DFL); }

int main() {

(void) signal(SIGINT,ouch); while(1) {

printf(\ sleep(1);

} }

9.编写程序,实现简单shell的基本功能。读入用户从键盘输入的命令,并执行它。 答:

#include main() { }

10.利用文件系统的系统调用creat()、open()、read()、write()、close()编写一个程序,把一个文件读出写到另一个文件中,实现简单的copy功能。 答:

main(argc,argv) int argc; char *argv[]; {int fd1,fd2,n;

char command[32]; char * prompt=\

while (printf(\{

if (fork()==0)

execlp(command,command,(char*)0); wait(0); else

}

char buf[512];

fd1=open(argv[1],0); fd2=creat(argv[2],0644); while((n=read(fd1,buf,512))>0) write(fd1,buf,n); close(fd1); close(fd2); }

第8章 习题答案

1. GTK+基于什么语言编写的?它与gnome有什么联系?

答:基于C语言编写的图形类库,gnome就是基于GTK图形库编写的Linux图形操作界面,由于gnome的流行,使得GTK编程成为Linux的图形化编程的主流。

2. GTK+和哪些函数库存在着依赖关系?

答:Glib,Pango,ATK,GDK,GdkPixbuf,Cairo。 3. 什么是GTK+信号?它和Linux中的信号概念一致吗?

答:信号(Signal)是GTK中出现的新的并且比较重要的概念。注意这里讲的“信号”不同于UNIX,Linux的signal,只是名称一样。当处理X事件时,如键盘按键按下,GTK的组件接收到这一事件,便发出响应的信号。类似于Windows编程中的消息事件机制。

4. 简述GTK+信号与回调过程?

答:使用函数gtk_signal_connect把组件object与回调函数func联系起来,name 是所发出的信号的名称。func_data是传递给回调函数的参数。比如要使一个按钮执行一个动作,就需用此函数设置信号和信号处理函数之间的连接。

gint

gtk_signal_connect(GtkObject

*object,gchar

*name,

GtkSignalFunc

func,gpointer func_data );

回调函数的格式如下,其中widget是发出信号的组件,callback_data是传递参数的指针。 void callback_func(GtkWidget *widget,gpointer callback_data); 5. 简述编写GTK+程序的步骤?

答:步骤如下:初始化,创建主窗口,创建并加入子窗口,设置组件回调,显示窗口,进入事件循环。 6. GTK+程序的编译参数都代表什么意义?

答:`gtk-config--cflags`产生编译GTK所使用的头文件位置,`gtk-config--libs`产生连接gtk程序编译时所使用的库。pkg-config --cflags gtk+-2.0就是列出include目录,pkg-config --libs gtk+-2.0就是列出编译连接库,也可以合在一起使用如:pkg-config --cflags --libs gtk+-2.0。

7. 用GTK+编写一个类似于Windows下的计算器程序。

答:源代码仅供参考: #include #include static GtkWidget *entry; gint count=0; gdouble nn=0; gdouble mm=0;

gint s=0;

gboolean first=TRUE; gboolean have_dot=FALSE; gboolean have_result=FALSE; gchar number[100]; void clear_all(void) {

gint i=0;

gtk_entry_set_text(GTK_ENTRY(entry),\ nn=0; mm=0; s=0; count=0; first=TRUE; have_dot=FALSE; have_result=FALSE; for(i=0;i<100;i++) number[i]='\\0'; }

void on_num_clicked(GtkButton *button,gpointer data) {

const gchar *num; gint i; if(have_result) clear_all(); if(count==6) return; count++;

num=gtk_button_get_label(GTK_BUTTON(button)); i=g_strlcat(number,num,100); if(first)

nn=strtod(number,NULL); else

mm=strtod(number,NULL);

gtk_entry_set_text(GTK_ENTRY(entry),number); }

void on_dot_clicked(GtkButton *button,gpointer data) { gint i;

if(have_result) clear_all(); if(have_dot==FALSE)

{

have_dot=TRUE;

i=g_strlcat(number,\

gtk_entry_set_text(GTK_ENTRY(entry),number); } }

void on_clear_clicked(GtkButton *button,gpointer data) {

clear_all(); }

void on_suan_clicked(GtkButton *button,gpointer data) {

gint i;

switch(GPOINTER_TO_INT(data)) {

case 1:

gtk_entry_set_text(GTK_ENTRY(entry),\ s=1; first=FALSE; count=0; break; case 2:

gtk_entry_set_text(GTK_ENTRY(entry),\ s=2; first=FALSE; count=0; break; case 3:

gtk_entry_set_text(GTK_ENTRY(entry),\ s=3; first=FALSE; count=0; break; case 4:

gtk_entry_set_text(GTK_ENTRY(entry),\ s=4; first=FALSE; count=0; break; }

have_dot=FALSE;


linux系统及编程基础课后答案(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:生产与运营管理A卷

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: