memset(info,0,len);
memcpy(info,recv_buffer,ret_value);
//注意,此处返回值是通过 memcpy来操作的,而非java那样函数返回值
#define MAX_SIZE 512
int getEncoderInfo (char *info, int len)
{
struct sockaddr_un address;
int sockfd;
int len;
int i, ret_value;
int result;
char recv_buffer[MAX_SIZE], send_buffer[MAX_SIZE] = "get";
/*创建socket,AF_UNIX通信协议,SOCK_STREAM数据方式*/
if ((sockfd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) {
perror ("socket");
return -1;
}
address.sun_family = AF_UNIX;
strcpy (address.sun_path, "server_socket");
//注:此处的 server_socket,应根据实际情况,这里根据海思源码应改为 /tmp/encoder-api.sock
len = sizeof (address);
/*向服务器发送连接请求*/
result = connect (sockfd, (struct sockaddr *)&address, len);
if (result == -1) {
printf ("ensure the server is up\n");
perror ("connect");
return -2;
}
memset(recv_buffer,0,MAX_SIZE);
if ((ret_value = write(sockfd, &send_buffer, MAX_SIZE)) == -1) { /*发消息给服务器*/
perror ("write");
return -3;
}
if ((ret_value = read (sockfd, &recv_buffer, MAX_SIZE)) == -1) { /*接收消息*/
perror ("read");
return -4;
}
memset(info,0,len);
memcpy(info,recv_buffer,ret_value);
close (sockfd);
return 0;
}