Matlab和C语言程式的应用编程接口

2008-02-23 05:41:15来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

在unix下写socket程式可能是最方便,您只要掌控其一般步骤,就能够松的写出面向传输层的应用。

1、理解几个常用的socket函数

#include
#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
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: 如何在Linux桌面上搭建C/C IDE研发环境 (1)

下一篇: 基于Visual C 6.0的Add-in编程实例 (2)