我有以下功能(转储进程内存区域)。如果我写入stdout write(STDOUT_FILENO, buf, rd);
它会正确输出缓冲区,当我想将缓冲区写入文件时,问题就会出现,文件会被写入但是反复使用相同的日期:
void dump_region(int fd, off64_t start, off64_t end)
{
char buf[4096];
int fdo;
fdo = open("memdump_log", O_WRONLY | O_CREAT, 0644);
if (fdo == -1) {
fprintf(stderr, "open failed: %m\n");
close(fd);
exit(1);
}
lseek64(fd, start, SEEK_SET);
while(start < end) {
int rd;
rd = read(fd, buf, 4096);
write(fdo, buf, rd);
//write(STDOUT_FILENO, buf, rd);
start += 4096;
}
close(fdo);
}
可以从main()
访问该功能,如下所示:
if(maps && mem != -1) {
char buf[BUFSIZ + 1];
while(fgets(buf, BUFSIZ, maps)) {
off64_t start, end;
sscanf(buf, "%llx-%llx", &start, &end);
dump_region(mem, start, end);
}
}
知道我哪里错了吗?
答案 0 :(得分:3)
修改
fdo = open("memdump_log", O_WRONLY | O_CREAT, 0644);
到
fdo = open("memdump_log", O_WRONLY | O_CREAT | O_APPEND, 0644);
答案 1 :(得分:2)
您需要搜索输出文件的末尾,或将O_APPEND
传递给打开
答案 2 :(得分:2)
每次调用dump_region时都会继续重新打开输出文件。打开文件时,它始终会在开始时写入。保持文件始终打开,搜索到最后,或尝试O_APPEND标志。