当前位置: 技术问答>linux和unix
mmap和malloc的区别是什么?
来源: 互联网 发布时间:2014-10-29
本文导语: 我编写程序时遇到这样的问题,想通过write这个系统调用将一个结构保存到文件中,结构的空间是用malloc分配的,假设结构指针为buf,结构的空间大小为n个字节,想保存到文件描述符为fd代表文件的偏移量为0处。 nw ...
我编写程序时遇到这样的问题,想通过write这个系统调用将一个结构保存到文件中,结构的空间是用malloc分配的,假设结构指针为buf,结构的空间大小为n个字节,想保存到文件描述符为fd代表文件的偏移量为0处。
nw = write(fd,buf,n);
返回的却是-1,错误码为无效的参数。
我保证传入参数是正确的,
我看到的例子中是将用mmap分配的空间中的数据保存到文件中,那个就可以。
难道是我用malloc的原因吗,buf指向的一个结构缓冲区不能写道一个文件中去吗?
nw = write(fd,buf,n);
返回的却是-1,错误码为无效的参数。
我保证传入参数是正确的,
我看到的例子中是将用mmap分配的空间中的数据保存到文件中,那个就可以。
难道是我用malloc的原因吗,buf指向的一个结构缓冲区不能写道一个文件中去吗?
|
mmap并不分配空间, 只是将文件映射到调用进程的地址空间里, 然后你就可以用memcpy等操作写文件, 而不用write()了.写完后用msync()同步一下, 你所写的内容就保存到文件里了. 不过这种方式没办法增加文件的长度, 因为要映射的长度在调用mmap()的时候就决定了.
mmap()和malloc()是完全不同的两码事, 不要混为一谈.
mmap()和malloc()是完全不同的两码事, 不要混为一谈.
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。