将信息附加到文件时遇到问题,使用 NFS 文件系统,多台机器同时访问一个文件。我结合了函数的功能:
open(nameFile.c_str(), O_WRONLY | O_APPEND);
来自fcntl.h
(参见描述),以及当进程尝试使用文件时锁定文件:
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);
}
我的问题是:
如果该文件不存在,则应创建它(如此处所述)。但是,文件没有被创建,所以里面要写入的内容丢失了。
我究竟做错了什么?
谢谢
编辑:
例如:
#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;
}