金牌会员
- 积分
- 2013
- 金钱
- 2013
- 注册时间
- 2017-12-11
- 在线时间
- 450 小时
|
1金钱
本帖最后由 bootblack 于 2021-9-17 13:36 编辑
请教,编译正确,运行《C应用编程指南14.5.1 mmap》实验,出现段错误 (核心已转储),想请教下各位,这是什么原因导致的?
恳请指教,不胜感激。
- #include <stdio.h>
- #include <fcntl.h>
- #include <unistd.h>
- #include <string.h>
- #include <stdlib.h>
- #include <signal.h>
- #include <sys/stat.h>
- #include <sys/mman.h>
- #include <sys/types.h>
- int main(int argc, char* argv[])
- {
- int srcfd, dstfd;
- void *srcaddr;
- void *dstaddr;
- int ret;
- struct stat sbuf;
- if (argc != 3) {
- fprintf(stderr, "usage: %s <srcfile> <dstfile>\n", argv[0]);
- exit(-1);
- }
- /* 打开源文件 */
- srcfd = open(argv[1], O_RDONLY);
- if (srcfd == -1) {
- perror("open src file error");
- exit(-1);
- }
- /* 打开目标文件 */
- dstfd = open(argv[2], O_RDWR | O_CREAT | O_TRUNC, 0664);
- if (dstfd == -1) {
- perror("open dst file error");
- ret = -1;
- goto out1;
- }
- /* 获取源文件大小 */
- fstat(srcfd, &sbuf);
- /* 设置目标文件大小 */
- ftruncate(dstfd, sbuf.st_size);
- /* 将源文件映射到内存区域中 */
- srcaddr = mmap(NULL, sbuf.st_size, PROT_READ, MAP_SHARED, srcfd, 0);
- if (srcaddr == MAP_FAILED) {
- perror("mmap srcfile error");
- ret = -1;
- goto out2;
- }
- /* 将目标文件映射到内存区域中 */
- dstaddr == mmap(NULL, sbuf.st_size, PROT_WRITE, MAP_SHARED, dstfd, 0);
- if (dstaddr == MAP_FAILED) {
- perror("mmap dstfile error");
- ret = -1;
- goto out3;
- }
- memcpy((char *)dstaddr, (char *)srcaddr, sbuf.st_size);
- out4:
- munmap(dstaddr, sbuf.st_size);
- out3:
- munmap(srcaddr, sbuf.st_size);
- out2:
- close(dstfd);
- out1:
- close(srcfd);
- exit(ret);
- }
复制代码
|
最佳答案
查看完整内容[请看2#楼]
特别感谢回复。
终端上就是显示“段错误 (核心已转储)”
没有额外信息了。
之前没搞过linux这块,目前遇到问题,感觉很茫然。
最终还是使用万变不变的printf打印变量看出来的。
第54行dst==map
这里打错了,应该是dst=map
再次感谢!
|