【无标题】

目        录

课程设计题目描述

课程设计目的和要求

系统运行报告 2

总结 5

参考文献 5

代码附录 6

一、课程设计题目(问题)描述:

任务1、基础知识,完成以下任务:

          Linux操作系统的安装、基本命令的使用,网络的配置,FTP服务器搭建,VI编辑器的使用,文件压缩方法。

任务2、Linux系统C程序设计的基本知识,完成以下任务

1)分别用if和switch判断一个数的奇偶性并输出结果。

2)用for语句编写程序,计算100到200之间所有奇数的和。

任务3、嵌入式Linux程序设计,完成以下任务

  1. 创建两线程,通过打印输出各自的线程号和打印次序,要求从打

印结果能看出两个线程是并发执行的。

  1. 创建两线程,A线程循环打印数组a[100],B线程循环将各数组成

员+1,要求利用互斥锁,使每次输出a[0]==a[99]。

  1. 创建两线程,A线程每2秒打印一次字母A,B线程每秒打印一次

字母B,要求利用同步信号量,使输出字母B总是在A之后。

任务4、Linux应用程序开发实践,任选以下任务之一完成:

2)实现一个简单shell。

二、课程设计目的和要求

1、目的与任务:

课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际应用问题进行有机结合,锻炼学生分析、解决实际问题的能力。

本课程设计采用理论指导与实践相结合的方式,系统地学习并实践嵌入式Linux程序开发技术。通过课程设计,学生可以熟练掌握Linux的基本操作,系统管理,并具备Linux下文件、进程、网络、GUI的开发方法,为实际应用开发打下坚实的基础。

2、目标

通过本次课程设计要求学生达到以下目标:

    1)熟悉Linux操作系统具体操作(安装、基本命令、系统管理、FTP

服务器搭建)

    2)熟悉Linux下C程序开发调试的基本过程。

    3)熟悉嵌入式Linux进程及进程间通信

  1. 能够熟练编写Linux应用程序,包括文件、网络、图形等

3、要求

计算机科学与技术专业的同学3-4人一组。完成任务3的选择3个题目,任务2选择2题,任务4中题目选一题。 

三、系统运行报告:

任务2、Linux系统C程序设计的基本知识,完成以下任务

1)分别用if和switch判断一个数的奇偶性并输出结果。

2)用for语句编写程序,计算100到200之间所有奇数的和。

任务3、嵌入式Linux程序设计,完成以下任务

1)创建两线程,通过打印输出各自的线程号和打印次序,要求从打

印结果能看出两个线程是并发执行的。

3)创建两线程,A线程循环打印数组a[100],B线程循环将各数组成

员+1,要求利用互斥锁,使每次输出a[0]==a[99]。

4)创建两线程,A线程每2秒打印一次字母A,B线程每秒打印一次

字母B,要求利用同步信号量,使输出字母B总是在A之后。

任务4、Linux应用程序开发实践,任选以下任务之一完成:

2)实现一个简单shell。

  

总结

通过这次嵌入式linux 的课程设计设计,让我对linux的设计编程有了更深的了解。特别别是对这次的linux 编程有了很大的进步,通过测试,编写的程序都能顺利运行。但由于时间紧迫,在很多地方还是做的不好,没能很深入的了解,所以我们课后要更加深入的去学习,自己动手时间多练习

  • 参考文

【1】刘银水,肖正宇,孙伟.基于ARM-Linux的嵌入式WEB服务器[J].单片机与嵌入式系统应用;2007.06.

【2】杜宝祯,祝静,徐涢基,何鹏举.基于Linux和S3C2440的GPC控制器设计[J].单片机与嵌入式系统应用.2009.11.

【3】吴迅;基于Linux的嵌入式WEB服务器的研究[D].山东师范大学;2010.

【4】马长青.Linux环境下基于Web的图档管理系统的开发[D].山东农业大学;2005.

【5】孙亚军.基于ARM的嵌入式Linux平台的研究与实现[D].东北大学.2009.

【6】Linux程序设计(第3版)  Neil Matthew Richard Stones 著 人 民邮电出版社

【7】嵌入式Linux应用程序开发详解  孙琼  人民邮电出版社

【8】http://www.mcuos.com/

代码附录

源程序清单

任务1:基础知识,完成以下任务:

    Linux操作系统的安装、基本命令的使用,网络的配置,FTP服务器搭建,VI编辑器的使用,文件压缩方法。

任务2:Linux系统C程序设计的基本知识,完成以下任务

1)分别用if和switch判断一个数的奇偶性并输出结果。

#include "stdio.h"

void main()

{

   int n;

   printf("请输入一个整数\n");

   scanf("%d",&n);

   if(n%2==0)

      printf("n为偶数!\n");

   else

     printf("n为奇数!\n");

  }

2)用for语句编写程序,计算100到200之间所有奇数的和。

#include<stdio.h>

void main()

{

int i,sum=0;

for(i=101;i<200;i+=2)

{sum+=i;}

printf("sum=%d\n",sum);

}

任务3:嵌入式Linux程序设计,完成以下任务

1)创建两线程,通过打印输出各自的线程号和打印次序,要求从打印结果能看出两个线程是并发执行的。

#include<sys/types.h>

#include<stdio.h>

#include<unistd.h>

#include<string.h>

#include<pthread.h>

#include<stdlib.h>

pthread_t thread[2];

void thread1() {

        printf("这是第一个线程\n");

        for (int i = 0; i < 5; i++)

        {

                printf("线程1:pid=%d,n=%d\n", getpid(), i);

                //pthread_nutex_lock(&nut);

                sleep(2);

        }

}

void thread2() {

        printf("这是第二个线程\n");

        for (int i = 0; i < 5; i++)

        {

                printf("线程2:pid=%d,n=%d\n", getpid(), i);

                //pthread_nutex_lock(&nut);

                sleep(2);

        }

}

int main(void) {

        int i, ret1,ret2;

        ret1 = pthread_create(&thread[0], NULL, (void *)thread1, NULL);

        if (ret1 != 0) {

                printf("Create pthread1 error!\n");

                exit(1);

        }

        ret2 = pthread_create(&thread[1], NULL, (void *)thread2, NULL);

        if (ret2 != 0) {

                printf("Create pthread2 error!\n");

                exit(1);

        }

        pthread_join(thread[0], NULL);

        pthread_join(thread[1], NULL);

        return (0);

}

3)创建两线程,A线程循环打印数组a[100],B线程循环将各数组成员+1,要求利用互斥锁,使每次输出a[0]==a[99]。

#include<sys/types.h>

#include<stdio.h>

#include<unistd.h>

#include<string.h>

#include<pthread.h>

#include<stdlib.h>

pthread_t thread[2];

pthread_mutex_t mut;

int a[100];

void thread1() {

        printf("这是第一个线程\n");

        for (int i = 0; i <= 50; i++)

        {

                printf("线程1:pid=%d,a[i]=%d\n", getpid(), i);

                pthread_mutex_lock(&mut);

                pthread_mutex_unlock(&mut);

                sleep(1);

        }

}

void thread2() {

        printf("这是第二个线程\n");

        for (int i = 0; i <= 50; i++)

        {

                printf("线程2:pid=%d,a[i]=%d\n", getpid(), 99-i);

                pthread_mutex_lock(&mut);

                pthread_mutex_unlock(&mut);

                sleep(1);

        }

}

int main(void) {

        int i, ret1,ret2;

        ret1 = pthread_create(&thread[0], NULL, (void *)thread1, NULL);

        if (ret1 != 0) {

                printf("Create pthread1 error!\n");

                exit(1);

        }

        ret2 = pthread_create(&thread[1], NULL, (void *)thread2, NULL);

        if (ret2 != 0) {

                printf("Create pthread2 error!\n");

                exit(1);

        }

        pthread_join(thread[0], NULL);

        pthread_join(thread[1], NULL);

        return (0);

}

4)创建两线程,A线程每2秒打印一次字母A,B线程每秒打印一次字母B,要求利用同步信号量,使输出字母B总是在A之后。

#include<sys/types.h>
#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<pthread.h>
#include<stdlib.h>

pthread_t thread[2];
pthread_mutex_t mut;
void thread1() {
        pthread_mutex_lock(&mut);
        printf("这是第一个线程\n");
        for (int i = 0; i <= 50; i++)
        {
                printf("线程1:pid=%d, A\n", getpid());

                pthread_mutex_unlock(&mut);
                sleep(1);
        }
}

void thread2() {
        pthread_mutex_lock(&mut);
        printf("这是第二个线程\n");
        for (int i = 0; i <= 50; i++)
        {
                printf("线程2:pid=%d, B\n", getpid());

                pthread_mutex_unlock(&mut);
                sleep(1);
        }
}

int main(void) {
        int i, ret1,ret2;
        ret1 = pthread_create(&thread[0], NULL, (void *)thread1, NULL);
        if (ret1 != 0) {
                printf("Create pthread1 error!\n");
                exit(1);
        }
        ret2 = pthread_create(&thread[1], NULL, (void *)thread2, NULL);
        if (ret2 != 0) {
                printf("Create pthread2 error!\n");
                exit(1);
        }

        pthread_join(thread[0], NULL);
        pthread_join(thread[1], NULL);
        return (0);
}

任务4:Linux应用程序开发实践,任选以下任务之一完成:

2)实现一个简单shell。

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#include<unistd.h>

#include<sys/types.h>

#include<sys/wait.h>

int main()

{

int i,j,status,l;

pid_t p;

char *command;

char **argv;

command=(char *)malloc(sizeof(char)*30);

argv=(char **)malloc(sizeof(char *)*30);

while(1)

{

printf("myshell>");

memset(command,0,sizeof(char)*30);

if(fgets(command,30,stdin)==NULL)

continue;

l=strlen(command)-1;

if(command[1]=='\n')

command[1]=0;

j=0;

argv[j]=command;

j++;

l=strlen(command);

for(i=0;i<1;i++)

{

if(command[i]==' ')

{

command[i]=0;

if(command[i+1] !=' ')

{

argv[j]=&command[i+1];

j++;

}

}

}

argv[j]=NULL;

p=fork();

if(p!=0)

{

waitpid(-1,&status,0);

}

else{

execve(argv[0],argv,NULL);

}

}

free(argv);

free(command);

return 0;

}

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值