Файлы, отображенные в память, используемые как данные программы регистрации в c
Я пытаюсь записать активность моей программы, используя отображенные в памяти файлы. Файл создан нормально, и я не могу написать в него, но я столкнулся с двумя проблемами:
- Когда я запускаю программу, файл либо сбрасывается, либо записывается поверх
- Строка, которую я печатаю на ней, написана не полностью.
вот где я создаю файл:
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