fastdfs封包格式

最近在写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 超时时间
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值