当前位置:文档之家› Linux程序设计报告

Linux程序设计报告

Linux程序设计报告
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、无优先

除了上述四个规则外,不再规定读写的优先权,谁先等待谁就先使用文件。

第2章 测试数据设计

为了验证算法的正确性,需要

设计测试数据,并对测试数据进行分析,总结出在该组测试数据下,程序应该得到什么结果,然后运行程序,将程序运行结果与分析结果

相比较,如果二者一致,则可认为程序是正确的。 作者设计的测试数据如表1所示,包括10个线程,其中有5个读者线程r1~r5,另外5个是写者线程w1~w5。读者线程r1在时刻0提出读请求,如果请求得到允许,r1将用15秒的时间读文件;写者线程

w3在时刻6提出写请求,如果请求得到允许,w3将用10秒的时间写文件。从表中可以看出,10个线程提出请求的次序是:r1,r2,w1,r3,w2,w3,r4,r5,w4,w5。 (1)读者优先算法

线程实际读写文件顺序为:r1,r2,r3,r4,r5,w1,w2,w3,w4,w5。执行情况见表2。

表2 线程的运行状况

线程名称 申请时刻 持续时间 开始操作时刻 结束操作时刻 "r1"

0 15 0 15 "r2" 1 15 1 16 "r3" 4 2 4 6 "r4" 7 8 7 15 "r5" 9 2 9 11 "w1" 3 3 16 19 "w2" 5 6 19 25 "w3" 6 10 25 35 "w4"

10 18 35 53 "w5"

12

2

53

55

(2)写者优先算法

线程实际读写文件顺序为:r1,r2,w1,w2,w3,w4,w5,r3,r4,r5。执行情况见表3。

名称时刻时间作时刻作时刻

"r1" 0 15 0 15

"r2" 1 15 1 16

"w1" 3 3 16 19

"w2" 5 6 19 25

"w3" 6 10 25 35

"w4" 10 18 35 53

"w5" 12 2 53 55

"r3" 4 2 55 57

"r4" 7 8 55 63

"r5" 9 2 55 57

(3)无优先算法

线程实际读写文件顺序为:r1,r2,w1,r3,w2,w3,r4,r5,w4,w5。执行情况见表4。

表4 线程的运行状况

线程名称申请

时刻

持续

时间

开始操

作时刻

结束操

作时刻

"r1" 0 15 0 15

"r2" 1 15 1 16

"w1" 3 3 16 19

"r3" 4 2 19 21

"w2" 5 6 21 27

"w3" 6 10 27 37

"r4" 7 8 37 45

"r5" 9 2 37 39

"w4" 10 18 45 63

"w5" 12 2 63 65

第3章算法实现

读者优先算法:

#include

#include

#include

#include

#include

#include

#include

#define MAX_THREAD 10

#define SNL 8

typedef struct{

char tn[3]; //name of thread

unsigned int rm; //the moment when this thread request to access data.

unsigned int pt; //duration of operation

unsigned int i; //same to rm

unsigned int b; //instance at which this thread begin to operate data unsigned int e; //ending instance

}TEST_INFO;

//TEST_INFO test_data[MAX_THREAD];

typedef struct {

char sn[SNL+1]; //student number

TEST_INFO ti[MAX_THREAD]; //test item

}TI; //test_item_for_student

//TI test_items[STUDENTS];

TI test_item={{"20152566"},

{{"w1", 4,7},{"r1",11,14},{"r2",1,5},{"w2",8,11},{"w3",15,2},{"r3",5,8}, {"r4",12,15},{"w4",5,2},{"r5",9,12},{"r6",15,3}}

};

char r_seq[MAX_THREAD][3];

char o_seq[MAX_THREAD][3];

int sr=0;

int so=0;

int rc=0; //count how many readers are reading

pthread_mutex_t cs_d; //guarentee mutually access data

pthread_mutex_t cs_rc; //guarentee mutually access "rc"

pthread_mutex_t cs_sr; //guarentee mutually access "sr"

pthread_mutex_t cs_so; //guarentee mutually access "sr"

time_t base; //the moment when function main begin

/*

void print_answer(){

int i;

printf("%s\n",test_item.sn);

printf("name r_m p_t i_t b_t e_t\n");

for(i=0;i

printf("%4s%4d%4d%8d%8d%8d\n",(test_item.ti)[i].tn,(test_item.ti)[i].rm,(test _item).ti[i].pt,(test_item.ti)[i].i,(test_item.ti)[i].b,(test_item.ti)[i].e);

}

printf("r_seq:");

for(i=0;i

printf("%4s",r_seq[i]);

}

printf("\n");

printf("o_seq:");

for(i=0;i

printf("%4s",o_seq[i]);

}

printf("\n");

}

*/

void save_answer(FILE *f){

int i;

fprintf(f,"\t%s_answer.txt\n\tr/w problem:read first\n\n",test_item.sn);

fprintf(f,"name r_m p_t i_t b_t e_t\n");

for(i=0;i

fprintf(f,"%4s%4d%4d%8d%8d%8d\n",(test_item.ti)[i].tn,(test_item.ti)[i].rm,(t est_item).ti[i].pt,(test_item.ti)[i].i,(test_item.ti)[i].b,(test_item.ti)[i].e);

}

fprintf(f,"\n");

fprintf(f,"r_seq:");

for(i=0;i

fprintf(f,"%4s",r_seq[i]);

}

fprintf(f,"\n");

fprintf(f,"o_seq:");

for(i=0;i

fprintf(f,"%4s",o_seq[i]);

}

fprintf(f,"\n");

}

void *r(void *td){

struct timeval t;

time_t rl=base;

sleep(((TEST_INFO *)td)->rm); gettimeofday(&t,NULL);

((TEST_INFO *)td)->i=difftime(https://www.doczj.com/doc/004707478.html,_sec,rl); pthread_mutex_lock(&cs_sr);

strcpy(r_seq[sr++],((TEST_INFO *)td)->tn); pthread_mutex_unlock(&cs_sr);

pthread_mutex_lock(&cs_rc);

rc++;

if(rc==1)pthread_mutex_lock(&cs_d); pthread_mutex_unlock(&cs_rc);

gettimeofday(&t,NULL);

((TEST_INFO *)td)->b=difftime(https://www.doczj.com/doc/004707478.html,_sec,rl); pthread_mutex_lock(&cs_so);

strcpy(o_seq[so++],((TEST_INFO *)td)->tn); pthread_mutex_unlock(&cs_so);

sleep(((TEST_INFO *)td)->pt); gettimeofday(&t,NULL);

((TEST_INFO *)td)->e=difftime(https://www.doczj.com/doc/004707478.html,_sec,rl);

pthread_mutex_lock(&cs_rc);

rc--;

if(rc==0)pthread_mutex_unlock(&cs_d); pthread_mutex_unlock(&cs_rc);

return 0;

}

void *w(void *td){

struct timeval t;

time_t wl=base;

sleep(((TEST_INFO *)td)->rm); gettimeofday(&t,NULL);

((TEST_INFO *)td)->i=difftime(https://www.doczj.com/doc/004707478.html,_sec,wl); pthread_mutex_lock(&cs_sr);

strcpy(r_seq[sr++],((TEST_INFO *)td)->tn); pthread_mutex_unlock(&cs_sr);

pthread_mutex_lock(&cs_d); gettimeofday(&t,NULL);

((TEST_INFO *)td)->b=difftime(https://www.doczj.com/doc/004707478.html,_sec,wl); pthread_mutex_lock(&cs_so);

strcpy(o_seq[so++],((TEST_INFO *)td)->tn); pthread_mutex_unlock(&cs_so);

sleep(((TEST_INFO *)td)->pt); gettimeofday(&t,NULL);

((TEST_INFO *)td)->e=difftime(https://www.doczj.com/doc/004707478.html,_sec,wl);

pthread_mutex_unlock(&cs_d);

return 0;

}

void create_exam(){

int i=0;

pthread_t ht[MAX_THREAD];

pthread_mutex_init(&cs_d,NULL);

pthread_mutex_init(&cs_rc,NULL);

pthread_mutex_init(&cs_sr,NULL);

pthread_mutex_init(&cs_so,NULL);

struct timeval t;

gettimeofday(&t,NULL);

base=https://www.doczj.com/doc/004707478.html,_sec;

for(i=0;i

if((test_item.ti)[i].tn[0]=='r'){

pthread_create(&ht[i],NULL,r,&((test_item.ti)[i]));

}

else if((test_item.ti)[i].tn[0]=='w'){

pthread_create(&ht[i],NULL,w,&((test_item.ti)[i]));

}

}

for(i=0;i

pthread_join(ht[i],NULL);

}

pthread_mutex_destroy(&cs_d);

pthread_mutex_destroy(&cs_rc);

pthread_mutex_destroy(&cs_sr);

pthread_mutex_destroy(&cs_so);

}

int main(int argc,char *argv[]){

int i=0;

int si,pos;

int fd;

FILE *fa;

char file_name[100];

create_exam();

sprintf(file_name,"%s_answer.txt",test_item.sn);

if((fa=fopen(file_name,"w"))==NULL){

printf("Error openning answer file:%s\n",file_name);

exit(3);

}

save_answer(fa);

exit(0);

}

1.写优先算法

#include

#include

#include

#include

#include

#include

#include

#define MAX_THREAD 10

#define SNL 8

typedef struct{

char tn[3]; //name of thread

unsigned int rm; //the moment when this thread request to access data.

unsigned int pt; //duration of operation

unsigned int i; //same to rm

unsigned int b; //instance at which this thread begin to operate data

unsigned int e; //ending instance

}TEST_INFO;

//TEST_INFO test_data[MAX_THREAD];

typedef struct {

char sn[100]; //student number

TEST_INFO ti[MAX_THREAD]; //test item

}TI; //test_item_for_student

//TI test_items[STUDENTS];

TI test_item={{"20152566"},

{{"w1", 4,7},{"r1",11,14},{"r2",1,5},{"w2",8,11},{"w3",15,2},{"r3",5,8}, {"r4",12,15},{"w4",5,2},{"r5",9,12},{"r6",15,3}}

};

char r_seq[MAX_THREAD][3];

char o_seq[MAX_THREAD][3];

int sr=0;

int so=0;

int rc=0; //count how many readers are reading

pthread_mutex_t cs_d; //guarentee mutually access data

pthread_mutex_t cs_rc; //guarentee mutually access "rc"

pthread_mutex_t cs_sr; //guarentee mutually access "sr"

pthread_mutex_t cs_so; //guarentee mutually access "sr"

time_t base; //the moment when function main begin

/*

void print_answer(){

int i;

printf("%s\n",test_item.sn);

printf("name r_m p_t i_t b_t e_t\n");

for(i=0;i

printf("%4s%4d%4d%8d%8d%8d\n",(test_item.ti)[i].tn,(test_item.ti)[i].rm,(test _item).ti[i].pt,(test_item.ti)[i].i,(test_item.ti)[i].b,(test_item.ti)[i].e);

}

printf("r_seq:");

for(i=0;i

printf("%4s",r_seq[i]);

}

printf("\n");

printf("o_seq:");

for(i=0;i

printf("%4s",o_seq[i]);

}

printf("\n");

}

*/

void save_answer(FILE *f){ //save the result

int i;

fprintf(f,"\t%s_answer.txt\n\tr/w problem:read first\n\n",test_item.sn);

fprintf(f,"name r_m p_t i_t b_t e_t\n");

for(i=0;i

fprintf(f,"%4s%4d%4d%8d%8d%8d\n",(test_item.ti)[i].tn,(test_item.ti)[i].rm,(t est_item).ti[i].pt,(test_item.ti)[i].i,(test_item.ti)[i].b,(test_item.ti)[i].e);

}

fprintf(f,"\n");

fprintf(f,"r_seq:");

for(i=0;i

fprintf(f,"%4s",r_seq[i]);

}

fprintf(f,"\n");

fprintf(f,"o_seq:");

for(i=0;i

fprintf(f,"%4s",o_seq[i]);

}

fprintf(f,"\n");

}

void *w(void *td){

struct timeval t;//结构体精确到秒

time_t rl=base; //返回时间main函数开始的时间

sleep(((TEST_INFO *)td)->rm);//休眠读线程进入的时间长

gettimeofday(&t,NULL);//获得当前的时间

((TEST_INFO *)td)->i=difftime(https://www.doczj.com/doc/004707478.html,_sec,rl);//将系统时间与main主函数执行的时间差赋值给i变量(读线程进入的时间)

pthread_mutex_lock(&cs_sr);//建立互斥锁

strcpy(r_seq[sr++],((TEST_INFO *)td)->tn);

pthread_mutex_unlock(&cs_sr);//解除互斥锁

pthread_mutex_lock(&cs_rc);

rc++;

if(rc==1)pthread_mutex_lock(&cs_d);

pthread_mutex_unlock(&cs_rc);

gettimeofday(&t,NULL);//获得当前的时间

((TEST_INFO *)td)->b=difftime(https://www.doczj.com/doc/004707478.html,_sec,rl);//将系统时间与main主函数执行的时间差赋值给b变量(读线程开始的时间)

pthread_mutex_lock(&cs_so);

strcpy(o_seq[so++],((TEST_INFO *)td)->tn);//将读线程名复制给0_seq队列pthread_mutex_unlock(&cs_so);

sleep(((TEST_INFO *)td)->pt);//休眠写进程持续的时间长

gettimeofday(&t,NULL);//获得当前的时间

((TEST_INFO *)td)->e=difftime(https://www.doczj.com/doc/004707478.html,_sec,rl);//

pthread_mutex_lock(&cs_rc);

rc--;

if(rc==0)pthread_mutex_unlock(&cs_d);

pthread_mutex_unlock(&cs_rc);

return 0;

}

void *r(void *td){

struct timeval t;

time_t wl=base;

sleep(((TEST_INFO *)td)->rm);//休眠写进程进入的时间长

gettimeofday(&t,NULL);

((TEST_INFO *)td)->i=difftime(https://www.doczj.com/doc/004707478.html,_sec,wl);//将系统时间与main主函数执行的时间差赋值给i变量(写线程进入的时间)

pthread_mutex_lock(&cs_sr);//建立互斥锁

strcpy(r_seq[sr++],((TEST_INFO *)td)->tn);// 将写线程名复制给r_seq队列pthread_mutex_unlock(&cs_sr);//解除互斥锁

pthread_mutex_lock(&cs_d);

gettimeofday(&t,NULL);//获得当前的时间

((TEST_INFO *)td)->b=difftime(https://www.doczj.com/doc/004707478.html,_sec,wl);//将系统时间与main主函数执行的时间差赋值给b变量(写线程开始的时间)

pthread_mutex_lock(&cs_so);

strcpy(o_seq[so++],((TEST_INFO *)td)->tn);// 将写线程名复制给o_seq队列pthread_mutex_unlock(&cs_so);

sleep(((TEST_INFO *)td)->pt);//休眠写进程持续的时间长

gettimeofday(&t,NULL);//获取当前的时间

((TEST_INFO *)td)->e=difftime(https://www.doczj.com/doc/004707478.html,_sec,wl);//将系统时间与main主函数执行的时间差赋值给e变量(写线程结束的时间)

pthread_mutex_unlock(&cs_d);

return 0;

}

void create_exam(){

int i=0;

pthread_t ht[MAX_THREAD];

pthread_mutex_init(&cs_d,NULL);//初始化互斥锁

pthread_mutex_init(&cs_rc,NULL);

pthread_mutex_init(&cs_sr,NULL);

pthread_mutex_init(&cs_so,NULL);

struct timeval t;

gettimeofday(&t,NULL);

base=https://www.doczj.com/doc/004707478.html,_sec;

for(i=0;i

if((test_item.ti)[i].tn[0]=='r'){

pthread_create(&ht[i],NULL,r,&((test_item.ti)[i]));

}

else if((test_item.ti)[i].tn[0]=='w'){

pthread_create(&ht[i],NULL,w,&((test_item.ti)[i]));

}

}

for(i=0;i

pthread_join(ht[i],NULL);

}

pthread_mutex_destroy(&cs_d);//销毁互斥锁

pthread_mutex_destroy(&cs_rc);

pthread_mutex_destroy(&cs_sr);

pthread_mutex_destroy(&cs_so);

}

int main(int argc,char *argv[]){

int i=0;

int si,pos;

int fd;

FILE *fa;

char file_name[100];

create_exam();

sprintf(file_name,"%s_answer.txt",test_item.sn);//从文件中读取

if((fa=fopen(file_name,"w"))==NULL){

printf("Error openning answer file:%s\n",file_name);

exit(3);

}

save_answer(fa);

exit(0);

}

2.无优先算法

#include

#include

#include

#include

#include

#include

#include

#define MAX_THREAD 10

#define SNL 8

typedef struct{

char tn[3]; //name of thread

unsigned int rm; //the moment when this thread request to access data.

unsigned int pt; //duration of operation

unsigned int i; //same to rm

unsigned int b; //instance at which this thread begin to operate data

unsigned int e; //ending instance

}TEST_INFO;

//TEST_INFO test_data[MAX_THREAD];

typedef struct {

char sn[100]; //student number

TEST_INFO ti[MAX_THREAD]; //test item

}TI; //test_item_for_student

//TI test_items[STUDENTS];

TI test_item={{"20152566"},

{{"w1", 4,7},{"r1",11,14},{"r2",1,5},{"w2",8,11},{"w3",15,2},{"r3",5,8},

{"r4",12,15},{"w4",5,2},{"r5",9,12},{"r6",15,3}}

};

char r_seq[MAX_THREAD][3];

char o_seq[MAX_THREAD][3];

int sr=0;

int so=0;

int rc=0; //count how many readers are reading

pthread_mutex_t cs_d; //guarentee mutually access data

pthread_mutex_t cs_rc; //guarentee mutually access "rc"

pthread_mutex_t cs_sr; //guarentee mutually access "sr"

pthread_mutex_t cs_so; //guarentee mutually access "sr"

time_t base; //the moment when function main begin

/*

void print_answer(){

int i;

printf("%s\n",test_item.sn);

printf("name r_m p_t i_t b_t e_t\n");

for(i=0;i

printf("%4s%4d%4d%8d%8d%8d\n",(test_item.ti)[i].tn,(test_item.ti)[i].rm,(test _item).ti[i].pt,(test_item.ti)[i].i,(test_item.ti)[i].b,(test_item.ti)[i].e);

}

printf("r_seq:");

for(i=0;i

printf("%4s",r_seq[i]);

}

printf("\n");

printf("o_seq:");

for(i=0;i

printf("%4s",o_seq[i]);

}

printf("\n");

}

*/

void save_answer(FILE *f){ //save the result

int i;

fprintf(f,"\t%s_answer.txt\n\tr/w problem:read first\n\n",test_item.sn);

fprintf(f,"name r_m p_t i_t b_t e_t\n");

for(i=0;i

fprintf(f,"%4s%4d%4d%8d%8d%8d\n",(test_item.ti)[i].tn,(test_item.ti)[i].rm,(t est_item).ti[i].pt,(test_item.ti)[i].i,(test_item.ti)[i].b,(test_item.ti)[i].e);

}

fprintf(f,"\n");

fprintf(f,"r_seq:");

for(i=0;i

fprintf(f,"%4s",r_seq[i]);

}

fprintf(f,"\n");

fprintf(f,"o_seq:");

for(i=0;i

fprintf(f,"%4s",o_seq[i]);

}

fprintf(f,"\n");

}

void *r(void *td){

struct timeval t;//结构体精确到秒

time_t rl=base; //返回时间main函数开始的时间

sleep(((TEST_INFO *)td)->rm);//休眠读线程进入的时间长

gettimeofday(&t,NULL);//获得当前的时间

((TEST_INFO *)td)->i=difftime(https://www.doczj.com/doc/004707478.html,_sec,rl);//将系统时间与main主函数执行的时间差赋值给i变量(读线程进入的时间)

pthread_mutex_lock(&cs_sr);//建立互斥锁

strcpy(r_seq[sr++],((TEST_INFO *)td)->tn);

pthread_mutex_unlock(&cs_sr);//解除互斥锁

pthread_mutex_lock(&cs_rc);

rc++;

if(rc==1)pthread_mutex_lock(&cs_d);

pthread_mutex_unlock(&cs_rc);

gettimeofday(&t,NULL);//获得当前的时间

((TEST_INFO *)td)->b=difftime(https://www.doczj.com/doc/004707478.html,_sec,rl);//将系统时间与main主函数执行的时间差赋值给b变量(读线程开始的时间)

pthread_mutex_lock(&cs_so);

strcpy(o_seq[so++],((TEST_INFO *)td)->tn);//将读线程名复制给0_seq队列pthread_mutex_unlock(&cs_so);

sleep(((TEST_INFO *)td)->pt);//休眠写进程持续的时间长

gettimeofday(&t,NULL);//获得当前的时间

((TEST_INFO *)td)->e=difftime(https://www.doczj.com/doc/004707478.html,_sec,rl);//

pthread_mutex_lock(&cs_rc);

rc--;

if(rc==0)pthread_mutex_unlock(&cs_d);

pthread_mutex_unlock(&cs_rc);

return 0;

}

void *w(void *td){

struct timeval t;

time_t wl=base;

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程序设计课程组 长春工业大学 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程序设计实验报告

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程序设计模式—机制与策略 什么是设计模式(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程序设计考试例题

例题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程序设计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的线程被唤醒

Linux程序设计实验报告.doc

Linux程序设计实验报告 Linux程序设计实验报告姓名学号班级指导教师2008年3月实验一Linux基本命令的使用1、实验内容和步骤步骤1以user_login用户身份并使用telnet登录Linux 服务器login (输入username)password (输入密码)步骤2使用新创建的用户账户和口令登录Linux系统,察看登录后的界面。 Adduser tty1 步骤3使用pwd命令,然后用ls命令,使用-a,-l,-F,-A,-lF等不同选项并比较不同之处。 [rootteacher ] pwd /root ls anaconda-ks.cfg Documents install.log.syslog Pictures Videos chapter15 Downloads kk Public Desktop install.log Music Templates ls -a 显示出包含隐藏文件的所有文件ls -F 显示出当前目录下的文件及其类型ls -l 显示目录下所有文件的许可权、拥有者、文件大小、修改时间及名称ls -R 显示出该目录及其子目录下的文件步骤4在当前目录下建立一个名为test的新目录,然后将工作目录切换到test下,尝试将/etc目录下的文件passwd拷贝到该目录下(cp 源文件目的目录)。 察看当前目录下的passwd文件的属主和文件权限。 Mkdir test cp /etc/passwd test ls -l total 4 -rw-r--r--. 1 root root 2755 2010-06-11 1315 passwd 步骤5尝试向当前目录下的passwd文件和/etc/passwd文件分别写入一些新内容,用

Linux程序设计实验

Linux程序设计实验7 ——进程通信1 一、实验目的 1.掌握常用的几种中断方法; 2.掌握signal函数实现信号处理程序设计院; 3.掌握多信号时的信号处理程序编写; 4.掌握应用管道实现信号处理的方法。 二、实验任务与要求 1.alarm函数产生的SIGALRM信号; 2.应用signal函数实现信号处理程序编写; 3.多信号时的信号处理程序编写; 4.应用管道实现信号处理的编写; 三、实验工具与准备 计算机PC机,Linux Redhat Fedora Core6操作系统 四、实验步骤与操作指导 任务1:硬中断实例 运行下列程序kk1.c: #include int main(void) { while(1); return 0; } (1)程序运行过程中,请你使用硬中断Ctrl+C或Ctrl-\中断程序的执行。 (2)可以使用信号SIGSEGV中断此程序,方法是先在后台运行此程序,得出程序进程号,然后用命令kill发送信号SIGSEGV,如下形式:

[root@localhost root]# ./kk & [root@localhost root]# [1] 7940 [root@localhost root]# kill -SIGSEGV 7940 根据提示,运行程序,结果如下: 任务2:使用软件中断。alarm函数和SIGALRM信号,调用alarm函数设定一个闹钟,告诉内核在seconds秒之后给当前进程发SIGALRM信号,该信号的默认处理动作是终止当前进程。这个函数的返回值是0或者是以前设定的闹钟时间还余下的秒数。 程序源代码kk2.c: #include #include int main(void) { int counter; alarm(10); for(counter=0; 1; counter++) printf("counter=%d ", counter); return 0; } 程序的作用是10秒钟之内不停地数数,10秒钟到了就被SIGALRM信号中断。 程序运行结果:

Linux程序设计考试例题

例题1 程序A生成1个文件,其大小为1000字节,其内容为小写字母abcd...z的循环。试编写该程序。 文件名t1.c #include #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个字节,显示在屏幕上。并且显示出当前时间。 文件名t2.c #include #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(0);}; 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))); }

Linux程序设计报告

昆明理工大学信息工程与自动化学院学生上机报告 (2012 —2013 学年第二学期) 年级、专业、班计科 102 学号姓名成绩 实验项目名称Linux程序设计上机报告指导教师欧阳鑫 教师评语 该同学是否了解相关理论: A.了解□ B.基本了解□ C.不了解□该同学的动手能力: A.强□ B.中等□ C.差□ 该同学的上机是否达到要求:A.达到□ B.基本达到□ C.未达到□上机实验报告是否规范: A.规范□ B.基本规范□ C.不规范□上机实验过程是否详细记录: A.详细□ B.一般□ C.没有□ 注:5个A 为优4个A为良3个A 为及格其余为不及格。 教师签名: 年月日 目录 上机实验一:虚拟机及Linux安装……………………………………………….2页

上机实验二:Linux下Shell程序开发……………….…………………………14页上机实验三:Linux下多进程多线程程序开发…………………………………20页 上机一:虚拟机及Linux安装 一、上机目的 1、安装虚拟机 2、在虚拟机上安装Red Hat Enterprise Linux 5 二、相关技术阐述 根据四的步骤一步一步安装实现,其中在安装虚拟机过程中用到下面代码: (1)su (2)chmod +w /etc/inittab (3)vi /etc/inittab (4)reboot 三、所用软件系统 VMware Workstation 、Red Hat Enterprise Linux 5 四、源代码或上机步骤 1、虚拟机(VMware Workstation)安装过程

(1) 单击VMware-workstation-full-9.0.2-1031769_https://www.doczj.com/doc/004707478.html,.exe可执 行文件,进入安装: (2)进入一下界面: (3)选择安装目录 (4)点击下一步 (5)点击下一步

Linux程序设计知识点整理

Prerequisite 一、Linux 命令 1、文件操作 列出目录内容: ls, dir, vdir 创建特殊文件: mkdir, mknod, mkfifo 文件操作: cp, mv, rm 修改文件属性: chmod, chown, chgrp, touch 查找文件: locate, find 字符串匹配: grep(egrep) 其它: pwd, cd, ar, file, grep, tar, more, less, head, tail, cat 2、进程操作 ps, kill, jobs, fg, bg, nice 3、其它 who, whoami, passwd, su, uname, … man 二、Linux工具 编辑工具:vi, emacs 编译、链接:gcc(GNU C Compiler -> GNU Compiler Collection) 调试:gdb make命令 版本控制工具:CVS等 三、编程语言 1、High-level Language:C/C++, Java, Fortran… 2、ELF binary format:Excutable and Linkable Format(工具接口标准委员会(TIS)选择了正在发展中的ELF体系上不同操作系统之间可移植的二进制文件格式) 四、GCC使用 -E: 只对源程序进行预处理(调用cpp预处理器) -S: 只对源程序进行预处理、编译 -c: 执行预处理、编译、汇编而不链接 -o output_file: 指定输出文件名 -g: 产生调试工具必需的符号信息 -O/On: 在程序编译、链接过程中进行优化处理

Linux程序设计

Linux程序设计课程简介和教学大纲格式 课程代码:21188100 课程名称:Linux程序设计 学分: 2.0 周学时总48学时(短学期) 面向对象:计算机科学与技术、软件工程数字媒体专业,三年级学生 预修课程要求:程序设计类课程 一、课程介绍(100-150字) (一)中文简介 本课程主要介绍Linux操作系统的安装、使用和管理。包括Linux的文件和文件系统结构,进程概念和管理,文件安全和共享,I/O重定向和管道,以及各种实用软件的使用,shell 程序设计,Linux系统程序设计。 (二)英文简介 This course introduces the Linux operating system installation、use and administration. Include Files and File System Structure,Process concept and administration ,File Security and File Sharing, I/O Redirection and Piping ,And the use of a variety of utility software , shell Programming, Introductory Linux system Programming. 二、教学目标 (一) 学习目标 本课程的目的是使学生熟悉Linux系统环境,通过本课程的学习能够使用、管理和维护Linux系统,掌握shell程序设计和Linux系统程序设计基本方法。本课程为学习“操作系统原理”和“操作系统分析及实验”课打下基础。 (二)可测量结果 通过本课程的学习能达以下目标: 1.了解Linux操作系统,学习并领会自由软件(Free Software)的思想和文化; 2.掌握Linux操作系统的安装; 3.掌握linux的文件、进程概念,管道及I/O重定向; 4.掌握linux系统常用命令、实用程序的使用和管理,熟悉Linux下各种工具软件的使 用; 5.了解Linux环境下开发环境和桌面系统; 6.了解shell编程,掌握基本的shell程序设计; 7.Linux环境下的API编程以及Linux的系统调用。 三、课程要求 (一)授课方式与要求

linux程序设计期末复习资料

1.GPL的含义是什么? 答:GPL,是General Public License的缩写,GNU通用公共许可证。 2.Linux的常用shell指令有哪些? (1)重定向输出的例子ls -1> lsoutput.txt ls -l >> lsoutput.txt 0:标准输入1:标准输出2:标准错误输出 (2)重定向输入的例子more < killout.txt (3)管道的例子ls -l | more (4)Hello World例子: #!/bin/bash #! 用来指明shell程序本身所在的位置 # It is a very simple example # 表示行注释 echo Hello the World echo是bash中的一个指令,显示 (5)shell程序的执行: a:在shell中输入指令bash hello b:在shell中输入指令chmod 755 hello ./hello (6)交互式输入read STR:运行该指令后,shell会停止等待输入,以回车键结束,此时不需要加引号,即使包含空格;如果加了引号,则引号将作为变量值的一部分。(7)bash的变量:bash中的变量不需要事先定义类型;默认为字符串,特殊标记为整型,没有浮点型;字符串含空格时必须使用双引号,不含空格可不用;赋值符号前后不能有空格;引用时,加${变量名},花括号可省略。 bash的变量(eg2_1) #!/bin/bash STR=Hello echo $STR echo $STR STR=7+5 STR=“Hello world”echo $STR echo $STR echo STR STR=Hello world (8)引号的作用:参数值中包含空白符号,就需要使用引号;如果双引号中含有以$开头的变量的引用,则需要使用变量值;如果是单引号中含有$的变量引用,则使用元符号,

linux程序设计

◆如用户有目录的写权限,则可以创建、删除目录下的任何文件或子目录,即使 该文件或子目录属于其他用户。 ◆必须有读和执行权限才可以使用“ls –l ”列出目录清单 ●void *类型的指针可以和任何其他类型的指针相互赋值而不会丢失任何信 息 ●malloc函数不会对分配到的空间进行清零,因此其内容是随机的 ●calloc函数返回一个指向包含nr个元素数组的指针,每个元素大小为size 个字节。calloc会对分配到的内存初始化,把每个比特置为0 ●realloc函数能够改变以前分配的内存块的大小,第1个参数ptr必须是由 malloc或calloc返回的指针,第2个参数size既可以大于旧内存块的大小,也可以小于它。 ●realloc不对增加的内存块初始化;realloc如果不能扩大内存块就返回 NULL,并保持原来ptr指向的内存区域不动;realloc的第一个参数为 NULL,其作用和malloc函数一样;realloc的第二个参数如果为0,则释放原来的内存块 ●内存分配后一定要记得用free释放,其参数为先前用malloc或call oc返 回的指针 文件系统用目录来组织文件 目录文件的结构非常简单,就是一系列目录项(dirent)的列表。每个目录

项,由两部分组成:所包含文件的文件名,以及该文件名对应的inode号码。 守护进程,也就是通常说的Daemon进程,是Linux中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程常常在系统引导装入时启动,在系统关闭时终止。 Setsid()的作用:让进程摆脱原会话的控制 让进程摆脱原进程组的控制 让进程摆脱原控制终端的控制

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程序设计 实验室名称:软件工程专业实验室实验课程编号:N03140112 总学时: 32 学 分: 2 适用专业:软件工程 先修课程: Linux操作系统、C程序设计 实验在教学培养计划中地位、作用: 通过讲授Linux的操作使用、系统结构和Linux环境下的程序设计,使学生对Linux操作系统获得一个全面的认识和掌握。一方面,学生通过学习系统程序设计,能够复习操作系统中的基本概念,对文件管理、进程控制有更深入的理解;另一方面,学生学会在Linux环境下工作,进一步熟悉C语言程序设计和数据结构的知识,编写进行系统维护的脚本文件和实用化的大型应用程序,如网络应用程序。同时,本课程为学生进一步学习其它后续课程(如高级操作系统、Linux内核源代码分析、嵌入式系统等)打下基础。

《Linux程序设计》实验大纲 Linux Program Design 课程类别:学科专业教育课程课程名称:Linux程序设计 开课单位:软件学院课程编号:N03140112 总学时:32 学分:2 适用专业:软件工程 先修课程:程序设计基础 一、实验教学目标 熟练掌握shell编程、熟练使用linux系统、掌握进程控制和进程间通信,学会编写网络程序,学会在linux环境中编写web程序。养成一种良好的程序设计风格。 二、实验环境 Linux

三、实验教材及参考书: [1] 实验指导书(自编讲义) [2]《Linux环境C程序设计》徐诚高莹婷等清华大学出版社2010.1 [3]《linux入门到精通》刘忆智清华大学出版社2010.1 四、实验成绩评定方式 根据学生在实验过程中的认真程度、上机结果验收情况以及实验报告撰写质量,进行综合评定。 五、实验项目及学时分配

Linux程序设计实验报告

《Linux程序设计》 实验报告 安徽工业大学计算机学院 2009年6月

实验一 Linux基本命令的使用 1、实验目的 学习和掌握Linux的基本命令。 2、实验内容和步骤 步骤1:以user_login用户身份并使用telnet登录Linux服务器,按照提示创建自己的账户和口令。 步骤 2:使用新创建的用户账户和口令登录Linux系统,察看登录后的界面。 步骤3:使用pwd命令察看当前的工作目录,然后用ls命令查看当前目录下的内容,尝试使用-a,-l,-F,-A,-lF等不同选项并比较不同之处。 步骤4:在当前目录下建立一个名为test的新目录,然后将工作目录切换到test下,尝试将/etc目录下的文件passwd拷贝到该目录下(cp 源文件目的目录)。察看当前目录下的passwd文件的属主和文件权限。

步骤5:尝试向当前目录下的passwd文件和/etc/passwd文件分别写入一些新内容(可使用echo “字符串” >>文件的命令),看看操作能否成功,如果不能成功,请说明原因。用cat命令浏览文件password的内容,用more命令进行浏览翻页操作,再用less命令浏览文件的内容。比较这几个命令的不同之处 步骤6:用ls命令查看test下文件的权限,用mv命令更改文件password的文件名为test.txt,尝试用chown和chgrp更改文件的属主为root、组为root,看看能否成功,不成功,请说明原因。尝试用chomd将文件权限为“-rw-------”。看看能否成功,不成功,请说明原因。

步骤7:用rm命令删除test目录下的所有文件,再用rmdir命令删除test目录。(想一想有没有一条命令将目录及目录下的所有文件删除,写出这条命令) 步骤8:使用ps命令查看当前系统内的进程,并利用man命令获取ps命令的参数,写出获取当前终端进程执行情况的ps命令。

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

浙江大学Linux程序设计实验报告1 课程名称:嵌入式程序设计实验实验名称:基于虚拟机的Linux操作系统安装 学生姓名:专业:学号: 同组学生姓名:指导老师:成绩: 一、实验目的 本实验主要内容是Vmware虚拟软件和LINUX系统的安装,Vmware是一款功能相当的强大的虚拟软件,它可以虚拟一台计算机的硬件,如虚拟CPU、内存、硬盘、网卡、串口、USB接口等等;通过Vmware虚拟软件可以实现在windows系统下运行Linux系统,当然它也支持windows系统,而且可以与windows系统进行交互,非常人性化;但是,在vmware 虚拟软件上再运行另一个系统,硬件设备要求较高,物理内存最好为有1G;这样在vmware 上就可以分配虚拟内存配置为512M,这样在vmware下跑Linux系统才能顺畅。 二、实验内容 1. 在Windows环境下安装虚拟机。 2.在运行虚拟机后,安装Linux操作系统。 3.启动Linux操作系统。 三、实验设备 1. PC 操作系统WIN98 或WIN2000 或WINXP。 2.虚拟机软件。 3.Linux镜像文件。 四、实验步骤 第一部分:虚拟机的安装 步骤1 在网络上下载一个最新版本的针对Windows系统的VMware-workstation,下面我们安装的是VMware-workstation5.0版本。双击此软件后,就会出现以下画面:

图1-1 欢迎界面 单击“next”按钮 步骤2 进入安装协议界面,具体如图1-2所示。 图1-2安装协议界面 选中“yes,I accept the terms in the license agreement”,单击“next”按钮步骤3 进入选择安装路径的界面,具体如图1-3所示。

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