我正在尝试使用内存映射文件记录我的程序的活动。该文件创建得很好,我也无法写入它,但是我遇到了两个问题:
- 当我重新运行程序时,文件要么重置要么写在上面
- 我在上面打印的字符串没有写在它的整体中。
这是我创建文件的地方:
void create_log(){
flog = open(LOG, O_RDWR | O_CREAT ,0666);
if(flog < 0){
if(errno!=EEXIST){
perror("Couldn't open log for writing");
exit(0);
}
}
if(lseek(flog, MMF, SEEK_SET) < 0){
perror("lseek");
exit(0);
}
if(write(flog,"", 1) < 0){
perror("Couldn't expand flog");
exit(0);
}
if((addr = mmap(NULL, MMF,PROT_READ|PROT_WRITE,MAP_SHARED,flog,0)) == MAP_FAILED){
perror("mmap");
}
sprintf(&addr[pos],"##NEW LOG##\n");
pos+=strlen(addr) + 1;
}
这是我写给它的一个例子:
void threads(){
int i;
for(i=0;i<data.triage;i++){
tid[i] = i;
pthread_create(&thread[i],NULL,worker,&tid[i]);
pthread_mutex_lock(&mutex);
sprintf(&addr[pos],"Triage %d opened\n",i);
pos = strlen(addr) + 1;
pthread_mutex_unlock(&mutex);
}
}
只有这 2 个sprintfs
日志文件会导致:
##NEW LOG##
Triage 0 openTriage 1 openTriage 2 openTriage 3 openTriage 4 opened\n