Matlab和C语言程式的应用编程接口
2008-02-23 05:41:15来源:互联网 阅读 ()
在unix下写socket程式可能是最方便,您只要掌控其一般步骤,就能够松的写出面向传输层的应用。
1、理解几个常用的socket函数
#include
int socket(int domain,int type,int portocol);
domain指所使用的协议族(family)能够为AF_UNIX和AF_INET,一般只用AF_INET(指Internet)type指所用的传输类型,能够为SOCK_STERAM(面向连接的TCP),和SOCK_DGRAM(面向无连接的udp)
int bind(int s,const struct sockaddr *address,size_t address_len);
s为socket返回的文档描述符
address为协议族名称和其他信息
具体结构为struct sockaddr_in{
short sin_family;/*协议族
u_short sin_port;/*端口*/
struct in_addr sin_addr;/*地址*/
char sin_zero[8];
};
int listen(int s,int backlog);
backlog为容许的请求数目
int accept(int s,struct sockaddr *address,int *address_len);
这里的前两个参数同上
addres_len是要传递一个记有结构大小的地址
int connect(int s,struct sockaddr *address,size_t address_len);
这里的参数意义同bind
2.理解建立程式的一般调用过程
要建立一个处理连接的服务器端程式,首先要调用socket函数创建一个socket,返回一个文档句柄fd,使以后对他的操作就象对普通文档设备相同读写。
由于是服务器端必须对一个断口进行监听其他机器的请求,所以接下去调用bind函数,传入刚才的fd,定义好地址和端口,由于是要接受来自任何host的连接所以应讲sin_addr赋为INADDR_ANY,port为您所设定的端口。
注意:这里的地址和端口是网络字节顺序,所以要调用htonl,htons完成主机字节顺序
到网络字节的转变
接下来就是监听listen,调用accept接受来自客户端的请求,accpet返回连接后的文档描述符,您就能够用他进行收发信息(对应于read,write)这样的一个过程就是socket->bind->listen->accpet->Read,write
而对于客户端则是socket->connect->read,write
三、C语言程式MEX文档实例
MATLAB 5 API提供了一系列程式来处理MATLAB所支持的各种数据类型,每一种数据类型都有对应函数共您使用来处理对应的数据。下面给出一个简单的C语言程式和和之对应的MEX文档代码,该程式的功能是将标量x加倍。
C语言程式如下:
#include "math.h" void timestwo(double y[], double x[]) { y[0]=2.0*x[0]; return; } 下面是和C语言程式功能相同的MEX文档: #include "mex.h" void timestwo(double y[], double x[]) { y[0]=2.0*x[0]; } void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { double *x, *y; int mrows, ncols; /*检查正确的参数数目*/ if(nrhs!=1){ mexErrMsgTxt("需要一个输入参数."); } else if(nlhs>1){ mexErrMsgTxt("输出参数太多."); } /*输入变量必须是非复数类型的标量*/ mrows=mxGetM(prhs[0]); ncols=mxGetN(prhs[0]); if(!mxIsDouble(prhs[0]) || mxIsComplex(prhs[0]) || !(mrows==1 && ncols==1)){ mexErrMsgTxt("输入变量必须是非复数类型的标量."); } /*为返回参数创建矩阵*/ plhs[0]=mxCreateDoubleMatrix(mrows, ncols, mxREAL); /*分配输入输出参数的指针*/ x=mxGetPr(prhs[0]); y=mxGetPr(plhs[0]); /*调用timestwo子函数*/ timestwo(y, x); } |
C语言是在编译的时候检查函数参数。MATLAB能够在M函数中传递任意数量和类型的参数,MEX文档也是如此,但是在程式中必须可靠地处理输入输出参数的数目。假如将上面的MEX文档命名为timestwo.c,就能够对他进行编译和链接,在MATLAB命令窗口下输入:
mex timestwo.c
这是产生MEX文档timestwo.***所必需的步骤,该文档的扩展名所运行的系统平台的类型。Windows系统下,扩展名为dll。此时,就能够象调用M函数相同调用timestwo了。
在MATLAB命令窗口中输入:
x=2;
y=timestwo(x);
就能够得到:
y=4;
四、小 结
MEX文档虽然具备较强大的功能,但并不是对任何的应用都恰当。MATLAB是个高效率的编程系统,特别适合于工程计算、系统仿真等应用。他的最大长处就是将人们从繁杂的程式中解放出来。因此,能够用M文档完成的程式,应尽量使用MATLAB编写,除非碰到必须使用MEX文档的情况。
MATLAB的应用编程接口是个功能强大的系统,除了调用C或Fortran程式,还能够实现从MATLAB环境中输入输出数据、在MATLAB中和其他程式建立客户/服务器关系等功能。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash