操作系统移植及应用程序开发课程设计Word格式.docx
《操作系统移植及应用程序开发课程设计Word格式.docx》由会员分享,可在线阅读,更多相关《操作系统移植及应用程序开发课程设计Word格式.docx(27页珍藏版)》请在冰豆网上搜索。
sys/time.h>
intlimit=10;
voidtimeout_info(intsigno)
{
if(limit==0)
{
printf("
Sorry,timerlimitreached.\n"
);
exit(0);
}
printf("
only%dsecondsleft.\n"
limit--);
}
voidinit_sigaction(void)
structsigactionact;
act.sa_handler=timeout_info;
act.sa_flags=0;
sigemptyset(&
act.sa_mask);
sigaction(SIGPROF,&
act,NULL);
voidinit_time(void)
structitimervalval;
val.it_value.tv_sec=1;
val.it_value.tv_usec=0;
val.it_interval=val.it_value;
setitimer(ITIMER_PROF,&
val,NULL);
intmain(void)
char*str;
charc;
init_sigaction();
init_time();
Youhaveonly10secondsforthinking.\n"
while
(1);
exit(0);
四、设计效果
图2超级终端显示效果
任务三:
多进程设计
(1)掌握Linux多进程程序编写。
(2)在设计工作目录下,为本设计建立工作目录process。
Mkdirprocess
(3)进入process目录,使用自己熟悉的编辑器(如vi)建立文件process.c,并编写如程序清单的代码。
(4)将光盘相应工程的Makefile文件复制到当前目录下,使用编辑器将其打开,并对Makefile文件进行如下修改保存,退出编辑器。
EXEC=process
OBJS=process
SRC=process
(5)输入make命令,对程序进行编译,编译完毕在当前目录下会生成可执行文件process。
(6)启动ARMLinux,进行NFS连接,进入/mnt/process目录,执行process程序。
./process
三.实验清单
fcntl.h>
unistd.h>
stdlib.h>
sys/types.h>
sys/wait.h>
intmain(intargc,char*argv)
intval,stat;
pid_tchild;
\nTrytocreatnewprocess.\n"
child=fork();
switch(child)
case-1:
//fault
perror("
fork.n"
exit(EXIT_FAILURE);
case0:
//childprocess
printf("
Thisischild.\n"
\tchildpidis%d\n"
getpid());
\tchildppidis%d\n"
getppid());
exit(EXIT_SUCCESS);
default:
//fatherprocess
waitpid(child,&
stat,0);
Thisisparent.\n"
\tchildexitedwith%d\n"
stat);
exit(EXIT_SUCCESS);
图3超级终端显示效果
任务四:
多线程设计
(1)掌握Linux多线程程序编写。
(1)在设计工作目录下,为本设计建立工作目录thread。
Mkdirthread
(2)进入process目录,使用自己熟悉的编辑器(如vi)建立文件thread.c,并编写如程序清单的代码。
EXEC=thread
OBJS=thread
SRC=thread
注意:
本程序的Makefile必须修改,为链接选项加上-lpthread参数。
(4)输入make命令,对程序进行编译,编译完毕在当前目录下会生成可执行文件thread。
(5)启动ARMLinux,进行NFS连接,进入/mnt/thread目录,执行thread程序。
./thread
sys/ioctl.h>
pthread.h>
inttask1(int*cnt)
while(*cnt<
5)
sleep
(1);
(*cnt)++;
task1cnt=%d.\n"
*cnt);
return(*cnt);
inttask2(int*cnt)
sleep
(2);
task2cnt=%d.\n"
intmain(intargc,char**argv)
intresult;
intt1=0;
intt2=0;
intrt1,rt2;
pthread_tthread1,thread2;
result=pthread_create(&
thread1,PTHREAD_CREATE_JOINABLE,(void*)task1,(void*)&
t1);
if(result)
perror("
pthread_create:
task1.\n"
exit(EXIT_FAILURE);
thread2,PTHREAD_CREATE_JOINABLE,(void*)task2,(void*)&
t2);
task2.\n"
pthread_join(thread1,(void*)&
rt1);
pthread_join(thread2,(void*)&
rt2);
total%dtimes.\n"
t1=t2);
returnvalueoftask1:
%d.\n"
rt1);
retuanvalueoftask2:
rt2);
exit(EXIT_SUCCESS);
4、设计效果
图4超级终端显示效果
任务五:
文件和目录操作目录设计
(1)掌握Linux下文件和目录的基本操作。
(1)在设计工作目录下,为本设计建立工作目录file。
Mkdirfile
(2)进入process目录,使用自己熟悉的编辑器(如vi)建立文件file.c,并编写如程序清单的代码。
EXEC=file
OBJS=file
SRC=file
(4)输入make命令,对程序进行编译,编译完毕在当前目录下会生成可执行文件file。
Make
(5)启动ARMLinux,进行NFS连接,进入/mnt/file目录,执行file程序。
./file
ls/tmp
FILE*fp;
intnum;
intfolder;
chara[]="
HelloARMLinux!
"
;
fp=fopen("
/tmp/linux.txt"
"
w+"
if(fp==NULL)
\nFailtoopenlinux.txt!
\n"
exit(-1);
num=fwrite(a,sizeof(a),1,fp);
%dbytedatahaswrittentolinux.txt\n"
num*sizeof(a));
folder=mkdir("
/tmp/linux"
1);
if(folder==-1)
\nFailtocreatefolderlinux!
\nIthasexiatedorthepathiserror!
Folderlinuxcreatedsuccess!
close(fp);
return0;
图5超级终端显示效果
任务六:
UDP设计
(1)掌握Linux下UDP通讯编程。
(1)在设计工作目录下,为本设计建立工作目录udp。
Mkdirudp
(2)进入udp目录,在内创建文件夹utalker,并在utalker目录下,使用自己熟悉的编辑器(如vi)建立文件talker.c,并编写如程序清单的代码。
cdudp
mkdirutalker
EXEC=talker
OBJS=talker
SRC=talker
(4)输入make命令,对程序进行编译,编译完毕在当前目录下会生成可执行文件talker。
(5)在udp目录下创建listener,并在listener目录下编写侦听端(监听断)程序文件listener.c,编写或者使用光盘提供的Makefile文件编译,得到侦听端程序listener,并运行。
mkdirlistener
cdlistener
make
./listener
(6)启动ARMLinux,进行NFS连接,进入/mnt/udp/utalker目录,运行发话端talker,观察主机是否接收到字符串“MagicARM2410UDPExperiment.”。
./talker192.168.1.92
Listener:
errno.h>
string.h>
netdb.h>
netinet/in.h>
sys/socket.h>
#definePORT5000
#defineBACKLOG10
#defineLENGTH512
intmain()
{intsockfd;
intnsockfd;
intsin_size;
charrevbuf[LENGTH];
structsockaddr_inaddr_local;
structsockaddr_inaddr_remote;
if((sockfd=socket(AF_INET,SOCK_DGRAM,0))==-1)
{printf("
ERROR:
FailedtoobtainSocketDescriptor!
return(0);
if((sockfd=socket(AF_INET,SOCK_DGRAM,0))==-1)
{printf("
else{printf("
OK:
ObtainSocketDescriptorsuccessfully.\n"
addr_local.sin_family=AF_INET;
addr_local.sin_port=htons(PORT);
addr_local.sin_addr.s_addr=INADDR_ANY;
bzero(&
(addr_local.sin_zero),8);
if(bind(sockfd,(structsockaddr*)&
addr_local,sizeof(structsockaddr))==-1)
FailedtobindPort%d\n"
PORT);
return(0);
}else{printf("
BindthePort%dsuccessfully.!
sin_size=sizeof(structsockaddr);
if(num=recvfrom(sockfd,revbuf,LENGTH,0,(structsockaddr*)&
addr_remote,&
sin_size)==-1)
ERROR!
}else{
%s\n"
revbuf);
close(sockfd);
return(0);
talker:
intmain(intargc,char*argv[])
charsdbuf[LENGTH];
charsdstr[]={"
MagicARM2410UDPExperiment."
};
if(argc!
=2)
Usage:
talkerHOSTIP(ex:
./talker192.168.1.92).\n"
addr_remote.sin_family=AF_INET;
addr_remote.sin_port=htons(PORT);
inet_pton(AF_INET,argv[1],&
addr_remote.sin_addr);
(addr_remote.sin_zero),8);
bzero(sdbuf,LENGTH);
num=sendto(sockfd,sdstr,strlen(sdstr),0,(structsockaddr*)&
addr_remote,sizeof(structsockaddr_in));
if(num<
0){
Failedtosendyoudata!
argv[1],num);
Sentto%stotal%dbytes!
图6.1虚拟机显示效果
图6.2超级终端显示效果
任务七:
TCP设计
(1)掌握Linux下TCP通讯编程。
(1)在设计工作目录下,为本设计建立工作目录tcp。
Mkdirtcp
(2)进入tcp目录,在内创建文件夹uclient,并在uclient目录下,使用自己熟悉的编辑器(如vi)建立文件client.c,并编写如程序清单的代码。
cdtcp
mkdiruclient
EXEC=client
OBJS=client
SRC=client
(4)输入make命令,对程序进行编译,编译完毕在当前目录下会生成可执行文件client。
(5)在tcp目录下创建server,并在server目录下编写侦听端(监听断)程序文件server.c,编写或者使用光盘提供的Makefile文件编译,得到侦听端程序server,并运行。
mkdirserver
cdserver
./server
(6)启动ARMLinux,进行NFS连接,进入/mnt/tcp/uclient目录,运行发话端client,运行成功后,在服务器端输入字符串并回车,在客户端观察是否收到
./client192.168.1.92
client:
#include<
arpa/inet.h>
sys/unistd.h>
#defineLENGTH256
intmain(intargc,char*argv[])
intsockfd;
/talker192.168.0.235).\n"
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
addr_remote.sin_port=htons(PORT);
if(connect(sockfd,(structsockaddr*)&
addr_remote,sizeof(structsockaddr))==-1){
Failedtoconnecttothehoat!
else
Haveconnectedtothe%s!
argv[1]);
while(strcmp(revbuf,"
exit"
)!
=0)
bzero(revbuf,LENGTH);
num=recv(sockfd,revbuf,LENGTH,0);
switch(num)
case-1:
return