将信息附加到文件时,使用NFS文件系统,多个计算机同时访问文件时出现问题。我结合了该功能的功能:
open(nameFile.c_str(), O_WRONLY | O_APPEND);
来自fcntl.h
(请参阅description),以及进程尝试使用时锁定文件:
size_t filedesc = open(nameFile.c_str(), O_WRONLY | O_APPEND);
if (filedesc != -1)
{
fp = fdopen(filedesc, "a");
}
if(fp != NULL)
{
//Initialize the flock structure.
struct flock lock;
memset (&lock, 0, sizeof(lock));
lock.l_type = F_WRLCK;
//Locking file
fcntl (filedesc, F_SETLKW, &lock);
//Writing log message
fputs((sMessage+ string("\n")).c_str(),fp);
//Unlocking log file
lock.l_type = F_UNLCK;
fcntl (filedesc, F_SETLKW, &lock);
//Close file
fclose(fp);
}
我的问题是:
如果文件不存在,则应创建该文件(如here所述)。但是,文件未创建,因此要写入的内容将丢失。
我做错了什么?
由于
编辑:
例如:
#include <string>
#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
#include <fcntl.h>
#include <string.h>
using namespace std;
static void writeToFile()
{
string nameFile = string("filename.txt");
FILE *fp=NULL;
size_t filedesc = open(nameFile.c_str(), O_WRONLY | O_APPEND);
if (filedesc != -1)
{
fp = fdopen(filedesc, "a");
}else{
perror("Unable to open file");
}
if(fp != NULL)
{
//Initialize the flock structure.
struct flock lock;
memset (&lock, 0, sizeof(lock));
lock.l_type = F_WRLCK;
//Locking file
fcntl (filedesc, F_SETLKW, &lock);
//Writing log message
fputs((string("message")).c_str(),fp);
//Unlocking log file
lock.l_type = F_UNLCK;
fcntl (filedesc, F_SETLKW, &lock);
//Close file
fclose(fp);
}else{
perror("fdopen failed");
}
}
int main()
{
string inputString(" ");
writeToFile();
return 0;
}