(第2版).

Slides:



Advertisements
Similar presentations
Ch5 Linux Network Programming Jianjian SONG Software Institute, Nanjing University Nov
Advertisements

高级服务器设计和实现 1 —— 基础与进阶 余锋
阻塞操作. 在 linux 里,一个等待队列由一个 wait_queue_head_t 类型的结构来描述 等待队列的初始化: static wait_queue_head_t testqueue; init_waitqueue_head(&testqueue);
1 实验二、 TCP 、 UDP 通信程序设计实验 ——TCP 通信实验 注意 bind 和 listen socket() bind() listen() accept() write() read() TCP Server read() socket() TCP Client connect()
计算机网络课程总结 一、计算机网络基础 计算机网络定义和功能、基本组成 OSI/RM参考模型(各层的功能,相关概念, 模型中数据传输 等)
马志强 软件学院501室 网络应用开发 马志强 软件学院501室
TCP/IP Socket网络编程.
Oracle数据库 Oracle 子程序.
Socket.
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
实验4 基于Socket的C/S程序开发 实验目的
在PHP和MYSQL中实现完美的中文显示
计算机网络实验介绍 信息网络实验室 2017/9/13 04:55:22.
TCP、UDP 通信实践 广州创龙电子科技有限公司 01 广州创龙电子科技有限公司
Hadoop I/O By ShiChaojie.
第12章 嵌入式系统的应用程序开发.
Socket Programming in C
Socket Programming.
第7章 Linux环境编程.
Socket Programming.
大学计算机基础 典型案例之一 构建FPT服务器.
SOCKET编程原理.
网络常用常用命令 课件制作人:谢希仁.
中国科学技术大学计算机系 陈香兰(0512- ) Autumn 2010
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
Windows网络操作系统管理 ——Windows Server 2008 R2.
文件读写实践 广州创龙电子科技有限公司 01 广州创龙电子科技有限公司
程式設計 博碩文化出版發行.
作業系統實習課(四) -檔案管理- 實驗室:720A 助教:鄧執中.
第2章 套接字网络编程基础 2.1 UNIX套接字网络编程接口的 产生与发展 2.2 套接字编程的基本概念 2.3 面向连接的套接字编程
第10章 文件操作.
《手把手教你学STM32》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司 淘宝店铺:
如何生成设备节点 广州创龙电子科技有限公司
Linux 文件操作——系统调用和标准 IO 库
中国科学技术大学计算机系 陈香兰(0551- ) Spring 2009
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
第 8 章 网络程序设计.
Java语言程序设计 清华大学出版社 第8章 输入输出流(1).
SOA – Experiment 2: Query Classification Web Service
Advister: Quincy Wu Speaker: Chenglin Tsai Date:3/26
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C语言程序设计 主讲教师:陆幼利.
本节内容 随机读取 视频提供:昆山爱达人信息技术有限公司.
DQMClientDim.cxx及双光子练习
第1章 c++概述 1.1 C++语言的简史及特点 1.2 简单的C++程序 1.3 C++语言的基本组成
Platform Builder使用介绍 WINCE系统应用开发流程说明 ACTION RDC 杨 涛 2005.Dec.3th
姚金宇 MIT SCHEME 使用说明 姚金宇
实验七 安全FTP服务器实验 2019/4/28.
计算机网络与网页制作 Chapter 07:Dreamweaver CS5入门
项目二:HTML语言基础.
面向非连接的 SOCKET编程 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
SOCKET( ).
Select模型 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
本节内容 Win32 API中的宽字符 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
2019/5/3 JAVA Socket(UDP).
第4章 Excel电子表格制作软件 4.4 函数(一).
iSIGHT 基本培训 使用 Excel的栅栏问题
本节内容 文件系统 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Visual Basic程序设计 第13章 访问数据库
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
Python 环境搭建 基于Anaconda和VSCode.
WSAAsyncSelect 模型 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang
_07多连接之select模型 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
阻塞式模型 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
助教:廖啟盛 JAVA Socket(UDP) 助教:廖啟盛
第四章 UNIX文件系统.
FVX1100介绍 法视特(上海)图像科技有限公司 施 俊.
《操作系统设计与实现》 Linux系统编程.
Presentation transcript:

(第2版)

主讲内容 第8章 嵌入式系统Boot Loader技术 第9章 嵌入式Linux操作系统移植 第10章 嵌入式Linux设备驱动程序开发

第11章 嵌入式Linux应用程序设计 11.1 嵌入式Linux C语言应用程序开发基础 11.1.1 编写源程序 从经典的“Hello World!”程序入手。首先打开编辑器VIM。在Linux PC上打开一个终端窗口,输入命令vi helloworld.c,打开并建立源文件。输入源代码 VIM相关的操作命令。 1.VIM中文件打开相关命令(在终端窗口中使用): 2.VIM光标操作类命令(VIM界面中使用): 3.屏幕操作类命令: 4.插入文本类命令: 5.删除操作相关命令:

第11章 嵌入式Linux应用程序设计 7.搜索及替换命令: 8.选项设置: 9.文本缓存操作:

第11章 嵌入式Linux应用程序设计 11.1.2 交叉编译程序 对于Makefile文件的编辑依然可以使用VIM。在Helloworld.c所在的目录中建立Makefile文件 Makefile文件保存好后,接下来就可以在helloworld.c文件目录下执行make命令进行编译了。编译后会产生ARM-Linux下的可执行文件helloworld,可以将此文件下载到目标板进行调试运行。

第11章 嵌入式Linux应用程序设计 11.1.3 调试程序 由于嵌入式系统资源有限性,一般不能直接在目标系统上进行调试,通常采用gdb+gdbserver的方式进行调试。 要采用远程调试(remote)的方法。 1.建立安装gdb组件 2.调试运行 3.调试命令(注意命令列表中括号里的内容为命令简写方式)

第11章 嵌入式Linux应用程序设计 11.2 文件I/O编程 Linux中的文件主要分为4种:普通文件、目录文件、链接文件和设备文件。 11.2.2 文件I/O操作API 1.open函数说明 open函数是用于打开或创建文件,在打开或创建文件时以指定文件的属性及用户的权限等各种参数。 (1)open函数原型: int open(const char *pathname, int flags, mode_t mode); (2)open函数相关头文件:

第11章 嵌入式Linux应用程序设计 (3)open函数的参数说明: pathname:被打开的文件名(包括路径名)。 flags:文件打开方式:(flag 参数可通过“|”组合构成) O_RDONLY:只读方式打开文件; O_WRONLY:写方式打开文件; O_RDWR:读写方式打开文件; 以上三个选项必须且只能使用其中一个 mode:被打开文件的存取权限,为8进制表示法 (4)open函数返回值: 打开成功返回文件描述符,通常是最小的未被使用的描述符;失败返回-1,并且错误代码存入errno,错误代码(定义于errno.h中,如需要处理错误需包含该头文件)

第11章 嵌入式Linux应用程序设计 2.close函数说明 close函数是用于关闭一个打开文件。当一个进程终止时,它所有已打开的文件都由内核自动关闭,很多程序都使用这一功能而不显示地关闭一个文件。 (1)close函数原型: int close(int fd); (2)close函数相关头文件: #include <unistd.h> (3)close函数的参数说明: fd:open函数打开成功返回的文件描述符。 (4)close函数返回值: 成功返回0;返回-1表示出错。

第11章 嵌入式Linux应用程序设计 3. read函数说明 ssize_t read(int fd,void * buf ,size_t count); (2)read函数相关头文件: #include <unistd.h> #include <stddef.h>//size_t为无符号整型型代表数量,ssize_t为signed size (3)read函数的参数说明: fd:文件描述符; buf:指定存储器读出数的缓冲区; count:指定读出的字节数。若参数count为0,则read()不会有作用并返回0。

第11章 嵌入式Linux应用程序设计 (4)read函数返回值: 返回值为实际读取到的字节数;如果返回0,表示已到达文件尾或是无可读取的数据,此外文件读写位置会随读取到的字节移动;当有错误发生时则返回-1,错误代码存入errno中,而文件读写位置则无法预期。

第11章 嵌入式Linux应用程序设计 4.write函数说明 write 函数是用于向打开的文件写数,写操作从文件的当前位移量处开始。若磁盘已满或超出该文件的长度,则write 函数返回失败。 (1)write函数原型: ssize_t write(int fd,void *buf,size_t count); (2)write函数相关头文件: 同read函数。 (3)write函数的参数说明: write会把参数buf所指的内存写入count个字节到参数fd所指的文件内。当然,文件读写位置也会随之移动。

第11章 嵌入式Linux应用程序设计 (4)write的返回值: 如果顺利write会返回实际写入的字节数。当有错误发生时则返回-1,错误代码存入errno中。错误代码: EINTR:此调用被信号所中断; EAGAIN:当使用不可阻断I/O 时(O_NONBLOCK),若无数据可读取则返回此值; EADF:参数fd非有效的文件描述词,或该文件已关闭。

第11章 嵌入式Linux应用程序设计 5.lseek函数说明 (1)lseek函数原型: off_t lseek(int fd,off_t offset,int whence); (2)lseek函数相关头文件: #include <unistd.h> #include <sys/types.h> (3)lseek函数的参数说明: (4)lseek的返回值: 当调用成功时则返回目前的读写位置,也就是距离文件开头多少个字节。若有错误则返回-1,errno会存放错误代码。

第11章 嵌入式Linux应用程序设计 6.fcntl函数说明 Linux采用上锁的方法避免共享的资源产生竞争的状态。 fcntl 是一个非常通用的函数,它还可以改变文件进程各方面的属性。 (1)fcntl函数原型: (2)fcntl函数相关头文件: (3)fcntl函数的参数说明: (4)fcntl的返回值:

第11章 嵌入式Linux应用程序设计 11.3 网络编程 11.3.1 网络通信基础及例程 嵌入式Linux的网络通信程序是基于套接字(Socket)模式的。Socket实际是网络传输层供给应用层的编程接口。常见的socket有三种类型如下: 1.流式socket(SOCK_STREAM) 流式套接字提供可靠的、面向连接的通信流;它使用TCP 协议,从而保证了数据传输的正确性和顺序性。 Socket编程采用客户/服务器模式。因此编程分为服务器端和客户端两部分。 2.数据报socket(SOCK_DGRAM) 数据通过相互独立的报文进行传输,数据报套接字定义了一种无连接的服务,是无序的,并且不保证是可靠、无差错的。它使用数据报协议UDP。

第11章 嵌入式Linux应用程序设计 3. 原始socket(SOCK_RAM) 以源程序为例,介绍流式Socket编程的基本方法: (1)服务器端源程序(server.c) (2)客户端源程序(client.c) 11.3.2 网络通信API 1.网络地址相关操作 (1)重要数据结构 sockaddr 和sockaddr_in两个结构体都是用来保存socket信息的。 ①sockaddr定义 ②sockaddr_in定义

第11章 嵌入式Linux应用程序设计 (2)IP地址转换函数 通常用户在表达地址时采用的是点分十进制表示的数值 (或者是以冒号分开的十六进制IPv6地址),而在通 常使用的socket 编程中所使用的则是二进制值,这就 需要将这两个数值进行转换。 ①inet_ntoa函数说明: ②inet_addr函数说明 ③inet_pton函数说明 ④inet_ntop函数说明

第11章 嵌入式Linux应用程序设计 2.其它转换函数 (1)存储顺序转换 (2)名字转换 在Linux中,有一些函数可以实现主机名和地址的转化,最为常见的有gethostbyname、gethostbyaddr、getaddrinfo 等,它们定义在<netdb.h>头文件中 3.Socket编程函数 (1)socket函数说明 该函数用于建立一个socket 连接,可指定socket类型等信息 ①函数原型 ②相关头文件 ③函数参数说明 ④函数返回值

第11章 嵌入式Linux应用程序设计 (2)bind函数说明 该函数是用于将本地IP地址定端口号的,若定其他地址则不能成功。另外,它主要用于TCP的连接,而在UDP的连接中则无必要。 ①函数原型 ②相关头文件 ③函数参数说明 ④函数返回值

第11章 嵌入式Linux应用程序设计 (3)listen函数说明 listen函数用于流式Socket(TCP协议)中使用。用于监听网络通信端口,检测客户端的服务请求。 ①函数原型 ②相关头文件 ③函数参数说明 ④函数返回值

第11章 嵌入式Linux应用程序设计 (4)connect函数说明 该函数在流式Socket中是用于bind的之后的client端,用于与服器端建立连接。 ①函数原型 int connect(int sockfd, struct sockaddr *serv_addr, int addrlen) ②相关头文件 #include <sys/socket.h> ③函数参数说明 socktd:套接字描述符; serv_addr:服务器端地址; addrlen:地址长度。 ④函数返回值 成功返回非负套接字描述符;出错返回-1

第11章 嵌入式Linux应用程序设计 (5)send函数说明 发送数据。 ①函数原型 int send(int sockfd, const void *msg, int len, int flags) ②相关头文件 #include <sys/socket.h> ③函数参数说明 socktd:套接字描述符; msg:指向要发送数据的指针; len:数据长度; flags:一般为0。 ④函数返回值 成功返回发送的字节数;失败返回-1。

第11章 嵌入式Linux应用程序设计 (6)recv函数说明 接收数据。 ①函数原型 int recv(int sockfd,void *buf,int len,unsigned int flags) ②相关头文件 #include <sys/socket.h> ③函数参数说明 socktd:套接字描述符; buf:存放接收数据的缓冲区; len:数据长度; flags:一般为0。 ④函数返回值 成功返回接收的字节数;失败返回-1。

第11章 嵌入式Linux应用程序设计 (7)sendto和recvfrom函数说明 功能类似5、6,只是在发送和接收数据时需要指定目的地址,可以再没有执行connect函数时直接发送或接收数据,常用于数据报Socket方式。 原型分别为: int sendto(int sockfd, const void *msg,int len,unsigned int flags,const struct sockaddr *to, int tolen) 参数to为目地机的IP 地址和端口号信息; int recvfrom(int sockfd,void *buf,int len,unsigned int flags,struct sockaddr *from,int *fromlen) 参数from为源机的IP 地址和端口号信息。

第11章 嵌入式Linux应用程序设计 11.4 应用实例 11.4.1 ADC应用实例 11.4.2 PWM蜂鸣器控制应用实例 11.4.3 触摸屏应用实例

11.5 本章小结 本章介绍了嵌入式Linux应用程序的一般开发方法。通过实例分析了简单应用、文件I/O操作和网络通信应用程序的设计的方法;并详细讲解了一些常用的API。