0

我正在尝试使用内存映射文件记录我的程序的活动。该文件创建得很好,我也无法写入它,但是我遇到了两个问题:

  1. 当我重新运行程序时,文件要么重置要么写在上面
  2. 我在上面打印的字符串没有写在它的整体中。

这是我创建文件的地方:

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
4

0 回答 0