linux下的文件传输C语言实现0
Ru来shen掌2017.05.03浏览37次分享举报
里面有一句代码 strncpy(file_name, buffer,strlen(buffer) > FILE_NAME_MAX_SIZE ?FILE_NAME_MAX_SIZE : strlen(buffer)); buffer是accept接受到的数据缓冲区,FILE宏定义为1024。 另外,这句代码是服务端的代码。为什么不是从file_name向buffer输送而是... 里面有一句代码
strncpy(file_name, buffer,strlen(buffer) > FILE_NAME_MAX_SIZE ?FILE_NAME_MAX_SIZE : strlen(buffer));
buffer是accept接受到的数据缓冲区,FILE宏定义为1024。
另外,这句代码是服务端的代码。为什么不是从file_name向buffer输送而是buffer向file_name输送(file_name是要给客户端的文件)。
源码一部分:
while(1)
{
struct sockaddr_in client_addr;
socklen_t length = sizeof(client_addr);
int new_server_socket = accept(server_socket, (struct sockaddr*)&client_addr, &length);
if (new_server_socket < 0)
{
printf("Server Accept Failed!\n");
break;
}
char buffer[BUFFER_SIZE];
bzero(buffer, sizeof(buffer)); //buffer置零
length = recv(new_server_socket, buffer, BUFFER_SIZE, 0);
if (length < 0)
{
printf("Server Recieve Data Failed!\n");
break;
}
char file_name[FILE_NAME_MAX_SIZE + 1];
bzero(file_name, sizeof(file_name));
strncpy(file_name, buffer,strlen(buffer) > FILE_NAME_MAX_SIZE FILE_NAME_MAX_SIZE : strlen(buffer));
FILE *fp = fopen(file_name, "r");
if (fp == NULL)
{
printf("File:\t%s Not Found!\n", file_name);
} 展开 对了,我是想问一下刚开始的那句strncpy里的第三个参数是什么意思,搜了一下好像是定义一个N,然后复制前N个字符,但这里有这么多,还有个strlen计数