社联网站建设的目的广州百度推广代理公司
目 录
1 实验一 实验名 1
1.1 实验目的 1
1.2 实验内容 1
1.3 实验设计 1
1.3.1 开发环境 1
1.3.2 实验设计 1
1.4 实验调试 2
1.4.1 实验步骤 2
1.4.2 实验调试及心得 4
附录 实验代码 5
2 实验二 实验名 13
2.1 实验目的 13
2.2 实验内容 13
2.3 实验设计 13
2.3.1 开发环境 13
2.3.2 实验设计 13
2.4 实验调试 14
2.4.1 实验步骤 14
2.4.2 实验调试及心得 14
附录 实验代码 16
3 实验三 实验名 18
3.1 实验目的 18
3.2 实验内容 18
3.3 实验设计 18
3.3.1 开发环境 18
3.3.2 实验设计 18
3.4 实验调试 21
3.4.1 实验步骤 21
3.4.2 实验调试及心得 21
附录 实验代码 23
4 实验四 实验名 28
4.1 实验目的 28
4.2 实验内容 28
4.3 实验设计 28
4.3.1 开发环境 28
4.3.2 实验设计 28
4.4 实验调试 30
4.4.1 实验步骤 30
4.4.2 实验调试及心得 31
附录 实验代码 31
1实验一 Linux用户界面的使用
1.1实验目的
1.掌握Linux操作系统的使用方法;
2.了解Linux系统内核代码结构;
3.掌握实例操作系统的实现方法。
1.2实验内容
1.编一个C程序,其内容为实现文件拷贝的功能。
基本要求:使用系统调用 open/read/write… ;
选择:容错、 cp 。
2.编一个C程序,其内容为分窗口同时显示三个并发进程的运行结果。要求用到Linux下的图形库。 (gtk/Qt)
基本要求:三个独立子进程,各自窗口显示;
选择: 三个进程誊抄演示。
1.3实验设计
1.3.1 开发环境
系统:Ubuntu 18.04.5 LTS
操作系统类型:64位
内核:Linux version 5.4.0-67-generic
内存:7.5GB
处理器:Intel® Core™ i5-8250U CPU @ 1.60GHz
图形:Intel(R UHD Graphics 620(KBL GT2)
磁盘:105.5GB
1.3.2 实验设计
1.编写拷贝功能,为其增加容错性。
每次从命令行读取参数,如果参数的个数小于三个,则调用perror返回错误信息,并exit(-1)退出。三个参数分别为运行的程序,拷贝的源文件和拷贝的目的文件。
用可读权限打开源文件,如果打开失败,则返回错误提示信息,并exit(-1)退出。
用可写和创建权限打开源文件,如果打开失败,则返回错误提示信息,并exit(-1)退出。
进入while循环,每次循环对源文件进行1024个字节的读取,并将实际读取的字节数返回给size变量,本文转载自http://www.biyezuopin.vip/onews.asp?id=16988然后将size大小的字节数写入目的文件。直到文件读取完毕退出循环。
关闭源文件和目的文件。
2.实现窗口显示并发运行结果。
对于显示窗口,采取用调用gtk进行显示。
对于并发程序,第一个依次显示26个英文字母;第二个显示浮点数;第三个显示数字10~59的十六进制数字。
将三个程序的运行结果通过gtk的label显示到窗口去,其中这些程序的运行是窗口显示程序的线程。
对于main.cpp来说,创建三个子进程对这三个程序进行调用。
/*my first test program*/
#include <gtk/gtk.h>
GtkWidget *label;
GtkWidget *window;
GtkWidget *button;
char str[100];
/* 这是一个回调函数。data 参数在本示例中被忽略。* 后面有更多的回调函数示例。*/
void hello( GtkWidget *widget,gpointer data )
{printf("Hello World\n");
}int main( int argc, char *argv[] )
{/* GtkWidget 是构件的存储类型 *//* 这个函数在所有的 GTK 程序都要调用。参数由命令行中解析出来并且送到该程序中*/gtk_init (&argc, &argv);/* 创建一个新窗口 */window = gtk_window_new (GTK_WINDOW_TOPLEVEL);gtk_window_set_title(GTK_WINDOW(window),"My first program helloworld!");g_signal_connect (G_OBJECT (window), "delete_event",G_CALLBACK (gtk_main_quit), NULL);g_signal_connect (G_OBJECT (window), "destroy",G_CALLBACK (gtk_main_quit), NULL);/* 设置窗口(按钮)边框的宽度。*/gtk_container_set_border_width (GTK_CONTAINER (window), 150);/* 创建一个标签为 "Hello World" 的新按钮。*/button = gtk_button_new_with_label ("Hello World");/* 当按钮收到 "clicked" 信号时会调用 hello() 函数,并将NULL传给* 它作为参数。hello() 函数在前面定义了。*/g_signal_connect (G_OBJECT (button), "clicked",G_CALLBACK (hello), NULL);/* 当点击按钮时,会通过调用 gtk_widget_destroy(window) 来关闭窗口。* "destroy" 信号会从这里或从窗口管理器发出。*/g_signal_connect_swapped (G_OBJECT (button), "clicked", G_CALLBACK (gtk_widget_destroy),window);// label=gtk_label_new(str);// sprintf(str,"%s","Hello World\n");// gtk_container_add(GTK_CONTAINER(button), label); // 将按钮放在布局容器里// gtk_widget_show(label);/* 把按钮放入窗口 (一个 gtk 容器) 中。*/gtk_container_add (GTK_CONTAINER (window), button);/* 最后一步是显示新创建的按钮和窗口 */gtk_widget_show (button);gtk_widget_show (window);/* 所有的 GTK 程序必须有一个 gtk_main() 函数。程序运行停在这里* 等待事件 (如键盘事件或鼠标事件) 的发生。*/gtk_main ();return 0;
}