主题 : 关于内存拷贝的问题-------memcpy 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 2403
精华: 0
发帖: 14
金钱: 100 两
威望: 38 点
综合积分: 28 分
注册时间: 2008-11-16
最后登录: 2017-09-13
楼主  发表于: 2009-11-12 09:40

 关于内存拷贝的问题-------memcpy

memcpy(dest, src, len);
客户端client把一个图片文件平分5等分,每份大小为len,分5次存入src缓存,然后发送到服务器server,
服务器server分5次接收,收发操作如下:
client:

for(i=0;i<5;i++)
{
    num = sendto(sockfd, src, len, 0, (struct sockaddr *)&addr_remote, sizeof(struct sockaddr_in));    
    if( num < 0 )
    {
         perror("send");    
            printf ("ERROR: Failed to send your data!\n", argv[1], num);    
    }
    
    else
    {
        printf("sdpart[0]=%x\n",bmp[i*OnePartSize]);
            printf ("OK: Sent to %s %d total %d bytes !\n", argv[1],PORT,num);
    }
}

server:
   while(num = recvfrom(cmd_sockfd, buf, len, 0,
               (struct sockaddr *)&addr_recarcmd, &sin_size))    
  
memcpy(dest, buf, len);

请问一下,这样操作,dest中存储地址会每次向后递增吗?能全部接收到client发过来的数据吗?据我所知write()函数是可以的。


*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
1楼  发表于: 2009-11-12 10:27
你用的是C,memcpy()每次用的是dest指针所指向的地址的副本,而不会去改变dest值本身,也就是说,memcpy()之后dest的值不会发生任何变化。据我所知,系统调用的write()中的buf参数也是一样的。
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."