最近在写fastdfs的C++接口,遇到了一些问题。总结如下:
作者定义了一个out_buff数组:
char out_buff[sizeof(TrackerHeader)+FDFS_GROUP_NAME_MAX_LEN+128];
函数分析:
sizeof(TrackerHeader) = 10;
FDFS_GROUP_NAME_MAX_LEN = 16;
TrackerHeader是一个结构体,定义如下
typedef struct
{
char pkg_len[FDFS_PROTO_PKG_LEN_SIZE];
char cmd;
char status;
} TrackerHeader;
FDFS_GROUP_NAME_MAX_LEN 是一个宏
#define FDFS_GROUP_NAME_MAX_LEN 16
总体的说:作者定义了一个结构体out_buff
char out_buff[16+10+128];
memset(out_buff, 0, sizeof(out_buff));//设置结构体0
snprintf(out_buff + sizeof(TrackerHeader), sizeof(out_buff) - sizeof(TrackerHeader), "%s", group_name);
//out_buff+10,的解释,指向out_buff[10],从第10个,snprintf解释在下面,这句代码含义:数组拷贝group_name到第10个字节以后。
filename_len = snprintf(out_buff + sizeof(TrackerHeader) + FDFS_GROUP_NAME_MAX_LEN, sizeof(out_buff) - sizeof(TrackerHeader) - FDFS_GROUP_NAME_MAX_LEN, "%s", filename);
//out+10+16,将filename拷贝到26个字节以后。
/*开始组包*/
pHeader = (TrackerHeader *)out_buff;
long2buff(FDFS_GROUP_NAME_MAX_LEN + filename_len, pHeader->pkg_len);//16+44-->pkg_len(包头);
pHeader->cmd = STORAGE_PROTO_CMD_DELETE_FILE;//操作模式,增删改查
STORAGE_PROTO_CMD_DELETE_FILE
#define STORAGE_PROTO_CMD_DELETE_FILE 12//宏定义,删除file操作
int snprintf(char restrict buf, size_t n, const char restrict format, …);函数说明:最多从源串中拷贝n-1个字符到目标串中,然后再在后面加一个0.
senddate(sock, out_buff,sizeof(TrackerHeader) + FDFS_GROUP_NAME_MAX_LEN + filename_len, g_network_timeout);
最后就是发送数据了:
- sock,网络套接字
- out_buff,char数组,里面填充了,group,filename等数据。
- sizeof(TrackerHeader) +
FDFS_GROUP_NAME_MAX_LEN + filename_len,发送数据的长度 。 - g_network_timeout 超时时间