Linux课程设计实验报告
本科实验报告
课程名称: OS 实验报告
姓 名:
学 院: 计算机科学与技术
系: 计算机科学与技术
专 业: 计算机科学与技术
年 级:
学 号:
指导教师:
2010 年 1 月 15 日
2
一.实验目的
1.掌握 Linux 操作系统的使用方法;
2.了解 Linux 系统内核代码结构;
3.掌握实例操作系统的实现方法。
二. 实验环境
Linux-2.6.20.1(旧内核为 2.6.18.1)
三. 实验内容
1.编写一个 C 程序实现文件拷贝
2.编写一个 C 程序实现三个程序并发执行
3.通过系统调用实现文件拷贝
4.通过增加设备驱动的方法实现字符设备的驱动
5.利用 GTK 做一个任务管理器
四. 实验具体过程
1.编写一个 C 程序实现文件拷贝.
a.程序说明
通过循环每次使用 fgetc 读取一个字符,直到文件末尾结束.
b.程序源码
#include
#include
#include
int main()
{
FILE *f1,*f2;
f1=fopen("./source.txt","r");
f2=fopen("./source2.txt","w");
int s=0;
while(!feof(f1))
{
s=fgetc(f1);
if(s==EOF) break;
fputc(s,f2);
}
fclose(f1);
fclose(f2);
printf("Copy complete!!\n");
}
2. 编写一个 C 程序实现三个程序并发执行
a.程序说明
首先是主程序通过 fork 函数创建新进程,然后通过调用 execv 打开新文件以
到并发执行三个程序的目的.
3
子程序则使用了 GTK 编程,在一个窗体中放置了一个滚动条,加了个文字标签以改善视
觉效果.
b.程序源码
子程序代码:
#include
typedef struct _ProgressData {
GtkWidget *window;
GtkWidget *pbar;
int timer;
gboolean activity_mode;
} ProgressData;
itoa(int i,char* string)
{
int power,j;
j=i;
for(power=1;j>=10;j/=10)
power*=10;
for(;power>0;power/=10)
{
*string++='0'+i/power;
i%=power;
}
*string++='%';
*string='\0';
}//将整数转换成字符串
/* 更新进度条,这样就能够看到进度条的
移动 */
gint progress_timeout( gpointer data )
{
ProgressData *pdata = (ProgressData
*)data;
gdouble new_val;
char s[10];
/* 使用在调整对象中设置的取值范
围计算进度条的值 */
new_val =
gtk_progress_bar_get_fraction
(GTK_PROGRESS_BAR (pdata->pbar)) +
0.005;
if (new_val > 1.0)
new_val = 0.0;
/* 设置进度条的新值 */
itoa(new_val*100,s);
gtk_progress_bar_set_fraction
(GTK_PROGRESS_BAR (pdata->pbar),
new_val);
gtk_progress_bar_set_text
(GTK_PROGRESS_BAR (pdata->pbar),s);
/* 这是一个 timeout 函数,返回 TRUE,
这样它就能够继续被调用 */
return TRUE;
}
/* 清除分配的内存,删除定时器(timer) */
void