东北大学嵌入式系统实验报告.docx

上传人:b****5 文档编号:5932577 上传时间:2023-01-02 格式:DOCX 页数:15 大小:762.78KB
下载 相关 举报
东北大学嵌入式系统实验报告.docx_第1页
第1页 / 共15页
东北大学嵌入式系统实验报告.docx_第2页
第2页 / 共15页
东北大学嵌入式系统实验报告.docx_第3页
第3页 / 共15页
东北大学嵌入式系统实验报告.docx_第4页
第4页 / 共15页
东北大学嵌入式系统实验报告.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

东北大学嵌入式系统实验报告.docx

《东北大学嵌入式系统实验报告.docx》由会员分享,可在线阅读,更多相关《东北大学嵌入式系统实验报告.docx(15页珍藏版)》请在冰豆网上搜索。

东北大学嵌入式系统实验报告.docx

东北大学嵌入式系统实验报告

嵌入式系统实验报告

第一题

写数据

fwrite的使用

使数组或结构体等类型可以进行一次性读写

#include

#include

voidmain()

{

FILE*fp1;

inti;

structstudent{

charname[10];

charclass;

charaddr[15];

}stu;

if((fp1=fopen("test.txt","wb"))==NULL)

{

printf("不能打开文件");

exit(0);

}

printf("请输入信息,姓名班级学号:

\n");

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

{

scanf("%s%s%s",stu.name,&stu.class,stu.addr);

fwrite(&stu,sizeof(stu),1,fp1);

}

fclose(fp1);

}

读数据

fread的使用

#include

#include

voidmain()

{

FILE*fp1;

inti;

structstudent{

charname[10];

charclass;

charaddr[15];

}stu;

if((fp1=fopen("test.txt","wb"))==NULL)

{

printf("不能打开文件");

exit(0);

}

printf("读取文件的内容如下:

\n");

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

{

fread(&stu,sizeof(stu),1,fp1);

printf("%s%s%s",stu.name,&stu.class,stu.addr);

}

fclose(fp1);

}

第二题

#include

#include

#include

#include

#defineMAX10

pthread_tthread[2];

pthread_mutex_tmut;

intnumber=0,i;

void*thread1()

{

printf("thread1 :

 I'm thread 1\n");

for(i=0;i

{

printf("thread1 :

 number = %d\n",number);

pthread_mutex_lock(&mut);

number++;

pthread_mutex_unlock(&mut);

sleep

(2);

}

printf("thread1 :

主函数在等我完成任务吗?

\n");

pthread_exit(NULL);

}

void*thread2()

{

printf("thread2 :

 I'm thread 2\n");

for(i=0;i

{

printf("thread2 :

 number = %d\n",number);

pthread_mutex_lock(&mut);

number++;

pthread_mutex_unlock(&mut);

sleep(3);

}

printf("thread2 :

主函数在等我完成任务吗?

\n");

pthread_exit(NULL);

}

voidpthread_create(void)

{

inttemp;

memset(&thread,0,sizeof(thread));//comment1/*创建线程*/

if((temp=pthread_create(&thread[0],NULL,thread1,NULL))!

=0)

//comment2 

printf("线程1创建失败!

\n");

else

printf("线程1被创建\n");

if((temp=pthread_create(&thread[1],NULL,thread2,NULL))!

=0)//comment3

printf("线程2创建失败");

else

printf("线程2被创建\n");

}

voidpthread_wait(void)

{/*等待线程结束*/

if(thread[0]!

=0)

{//comment4 

pthread_join(thread[0],NULL);

printf("线程1已经结束\n");

}

if(thread[1]!

=0){//comment5

pthread_join(thread[1],NULL);

printf("线程2已经结束\n");

}

}

intmain()

{

/*用默认属性初始化互斥锁*/

pthread_mutex_init(&mut,NULL);

printf("我是主函数哦,我正在创建线程\n");

pthread_create();

printf("我是主函数哦,我正在等待线程完成任务\n");

pthread_wait();

return0;

}

第三题

发送数据

#include

#include

#include

#include

#include

#include

structmsg_st

{

longintmsg_type;

chartext[BUFSIZ];

};

intmain()

{

intrunning=1;

intmsgid=-1;

structmsg_stdata;

longintmsgtype=0;//建立消息队列

msgid=msgget((key_t)1234,0666|IPC_CREAT);

if(msgid==-1)

{

fprintf(stderr,"msggetfailedwitherror:

%d\n",errno);

exit(EXIT_FAILURE);

}//从队列中获取消息,直到遇到end消息为止

while(running)

{

if(msgrcv(msgid,(void*)&data,BUFSIZ,msgtype,0)==-1)

{

fprintf(stderr,"msgrcvfailedwitherrno:

%d\n",errno);

exit(EXIT_FAILURE);

}

printf("Youwrote:

%s\n",data.text);//遇到end结束

if(strncmp(data.text,"end",3)==0)

running=0;

}//删除消息队列

if(msgctl(msgid,IPC_RMID,0)==-1)

{

fprintf(stderr,"msgctl(IPC_RMID)failed\n");

exit(EXIT_FAILURE);

}

exit(EXIT_SUCCESS);

}

接受数据

#include

#include

#include

#include

#include

#include

#defineMAX_TEXT512

structmsg_st

{

longintmsg_type;

chartext[MAX_TEXT];

};

intmain()

{

intrunning=1;

structmsg_stdata;

charbuffer[BUFSIZ];

intmsgid=-1;

//建立消息队列

msgid=msgget((key_t)1234,0666|IPC_CREAT);

if(msgid==-1)

{

fprintf(stderr,"msggetfailedwitherror:

%d\n",errno);

exit(EXIT_FAILURE);

}

//向消息队列中写消息,直到写入end

while(running)

{

//输入数据

printf("Entersometext:

");

fgets(buffer,BUFSIZ,stdin);

data.msg_type=1;//注意2

strcpy(data.text,buffer);

//向队列发送数据

if(msgsnd(msgid,(void*)&data,MAX_TEXT,0)==-1)

{

fprintf(stderr,"msgsndfailed\n");

exit(EXIT_FAILURE);

}

//输入end结束输入

if(strncmp(buffer,"end",3)==0)

running=0;

sleep

(1);

}

exit(EXIT_SUCCESS);

}

第四题

发送数据

#include

#include

#include

#include

#include

#include

intmain()

{

intsfp,nfp;/*定义两个描述符*/

structsockaddr_ins_add,c_add;

intsin_size;

unsignedshortportnum=0x8888;/*服务端使用端口*/

printf("Hello,welcometomyserver!

\r\n");

sfp=socket(AF_INET,SOCK_STREAM,0);

if(-1==sfp)

{

printf("socketfail!

\r\n");

return-1;

}

printf("socketok!

\r\n");

/*填充服务器端口地址信息,以便下面使用此地址和端口监听*/

bzero(&s_add,sizeof(structsockaddr_in));

s_add.sin_family=AF_INET;

s_add.sin_addr.s_addr=htonl(INADDR_ANY);/*这里地址使用全0,即所有*/

s_add.sin_port=htons(portnum);

/*使用bind进行绑定端口*/

if(-1==bind(sfp,(structsockaddr*)(&s_add),sizeof(structsockaddr)))

{

printf("bindfail!

\r\n");

return-1;

}

printf("bindok!

\r\n");

/*开始监听相应的端口*/

if(-1==listen(sfp,5))

{

printf("listenfail!

\r\n");

return-1;

}

printf("listenok\r\n");

while

(1)

{

sin_size=sizeof(structsockaddr_in);

/*accept服务端使用函数,调用时即进入阻塞状态,等待用户进行连接,在没有客户端进行连接时,程序停止在此处,

不会看到后面的打印,当有客户端进行连接时,程序马上执行一次,然后再次循环到此处继续等待。

此处accept的第二个参数用于获取客户端的端口和地址信息。

*/

nfp=accept(sfp,(structsockaddr*)(&c_add),&sin_size);

if(-1==nfp)

{

printf("acceptfail!

\r\n");

return-1;

}

printf("acceptok!

\r\nServerstartgetconnectfrom%#x:

%#x\r\n",ntohl(c_add.sin_addr.s_addr),ntohs(c_add.sin_port));

/*这里使用write向客户端发送信息,也可以尝试使用其他函数实现*/

if(-1==write(nfp,"hello,welcometomyserver\r\n",32))

{

printf("writefail!

\r\n");

return-1;

}

printf("writeok!

\r\n");

close(nfp);

}

close(sfp);

return0;

}

接受数据

#include

#include

#include

#include

#include

#include

intmain()

{

intcfd;/*文件描述符*/

intrecbytes;

intsin_size;

charbuffer[1024]={0};/*接受缓冲区*/

structsockaddr_ins_add,c_add;/*存储服务端和本端的ip、端口等信息结构体*/

unsignedshortportnum=0x8888;/*服务端使用的通信端口,可以更改,需和服务端相同*/

printf("Hello,welcometoclient!

\r\n");

/*建立socket使用因特网,TCP流传输*/

cfd=socket(AF_INET,SOCK_STREAM,0);

if(-1==cfd)

{

printf("socketfail!

\r\n");

return-1;

}

printf("socketok!

\r\n");

/*构造服务器端的ip和端口信息,具体结构体可以查资料*/

bzero(&s_add,sizeof(structsockaddr_in));

s_add.sin_family=AF_INET;

s_add.sin_addr.s_addr=inet_addr("192.168.1.104");/*ip转换为4字节整形,使用时需要根据服务端ip进行更改*/

s_add.sin_port=htons(portnum);/*这里htons是将short型数据字节序由主机型转换为网络型,其实就是

将2字节数据的前后两个字节倒换,和对应的ntohs效果、实质相同,只不过名字不同。

htonl和ntohl是

操作的4字节整形。

将0x12345678变为0x78563412,名字不同,内容两两相同,一般情况下网络为大端,

PPC的cpu为大端,x86的cpu为小端,arm的可以配置大小端,需要保证接收时字节序正确。

*/

printf("s_addr=%#x,port:

%#x\r\n",s_add.sin_addr.s_addr,s_add.sin_port);/*这里打印出的是小端

和我们平时看到的是相反的。

*/

/*客户端连接服务器,参数依次为socket文件描述符,地址信息,地址结构大小*/

if(-1==connect(cfd,(structsockaddr*)(&s_add),sizeof(structsockaddr)))

{

printf("connectfail!

\r\n");

return-1;

}

printf("connectok!

\r\n");

/*连接成功,从服务端接收字符*/

if(-1==(recbytes=read(cfd,buffer,1024)))

{

printf("readdatafail!

\r\n");

return-1;

}

printf("readok\r\nREC:

\r\n");

buffer[recbytes]='\0';

printf("%s\r\n",buffer);

getchar();/*此句为使程序暂停在此处,可以使用netstat查看当前的连接*/

close(cfd);/*关闭连接,本次通信完成*/

return0;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1