1

将信息附加到文件时遇到问题,使用 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;
}
4

0 回答 0