我正在使用Linux写入系统调用以1-2秒的固定间隔将一些记录写入100个文件。
使用
LogFile = open(fileBuff, O_CREAT | O_RDWR | N_IRUSR | N_IWUSR | N_IXUSR);
当我从文件中读取日志时,缺少一些日志。
假设我的值从1开始并持续增加,所以当我阅读它时
880, 881, 0, 0, 0 ,0 ,0, 887
丢失记录“ 0”有时也会更多。
这不是实际的代码,但这正是我在做的。 从read_queue调用saveRecordToFile。 队列最大计数大小为3000。
void saveRecordToFile(int fid, int writeindex, char *buff)
{
int LogFile = fid, Curpos = 0;
semaCapture(&LogSema);
lseek(LogFile,0,SEEK_SET);
if((num_bytes = write(LogFile,&(writeindex),sizeof(long))) != -1)
{
if((num_bytes = write(LogFile,&(read_index),sizeof(long)) == -1))
{
LogMessage(LOG_ERROR, "Log read index Write failed, read_index:%d, num_bytes:%d, reason:%s \n",
read_index, num_bytes, strerror(errno));
}
}
Curpos = (((writeindex) * sizeof(LogRecord)) + (2* sizeof(long)) + sizeof(PropertiesToSave));
lseek(LogFile,Curpos,SEEK_SET);
if((num_bytes = write(LogFile,bp,sizeof(LogRecord))) == -1)
{
LogMessage(LOG_ERROR, "LogRecord writing failed, num_bytes:%d, reson:%s\n",
num_bytes, strerror(errno));
}
LogFile = -1;
semaRelease(&LogSema);
}
可以采取哪些措施来避免遗漏写信?