如何将字符串放入映射的内存块中?

时间:2015-12-10 23:01:45

标签: c linux ftp mmap

我在Linux上制作了一个FTP服务器,我在这里有一个获取文件名和大小的函数,创建一个文件大小的新文件 - 目的是在服务器上创建一个文件来自客户端(recvBuff)使用mmap。

我要做的是将recvBuff中的数据输入映射的内存(fp)。

我是否需要对映射内存进行实际写入? 文件创建正常,但内容为一组NULL(\ 00)。

所有参数都有值 - recvBuff是" hello world"并且大小不是0等等。

这可能与文件权限VS有关。 mmap权限或只是我没有正确地将数据复制到fp。

我确定这是一些愚蠢的事情,但我迷失了自己,看着它并使用printf进行调试。

由于

// recieve file from client
void put(int sockfd, char* fname, int fsize) {
int readen, nbytes,fd_src;
char recvBuff[fsize+1];
char path[256];
char cwd[1024];
char * src;

getcwd(cwd, sizeof(cwd));
sprintf(path,"/Server/%s", fname);
path[strlen(path)]='\0';
strcat(cwd,path);
strcpy(path,cwd);
printf("path:%s ,sockfd:%d , fname:%s, f_size: %d\n",path,sockfd,fname,fsize);

char* fp;
int fd;
if((fd = open(path, O_CREAT | O_RDWR | O_TRUNC, 0644)) < 0) //open new file for writing
    perror("fd"); 

lseek (fd, fsize + 1, SEEK_SET);
write (fd, "", 1);
lseek (fd, 0, SEEK_SET);


if ((fp = mmap(0, fsize, PROT_WRITE | PROT_READ, MAP_PRIVATE, fd, 0)) == (caddr_t)-1)
    perror("mmap for output");

    if(fp== MAP_FAILED)
        printf("mmap error\n");
ftruncate(fd, fsize);
while((readen = recv(sockfd, recvBuff, sizeof recvBuff, 0))>0) {    
    src=recvBuff;
    memcpy(fp,src,readen);
    if(readen == fsize){
        munmap(fp,readen);
        close(fd);
        break;
    }
}
if(readen == -1) {
    perror("recv");
}
}

0 个答案:

没有答案