Файлы, отображенные в память, используемые как данные программы регистрации в c

Я пытаюсь записать активность моей программы, используя отображенные в памяти файлы. Файл создан нормально, и я не могу написать в него, но я столкнулся с двумя проблемами:

  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

0 ответов

Другие вопросы по тегам