1

Windows から Mac OS X にアプリケーションを移植しています。以下のコードでは、指定されたファイルを書き込み用に開きます。Windows では、 second で失敗することがわかりましたOpenFileForWrite。ただし、Mac OS X では、同じファイルを を使用して書き込み用に開くことができますOpenFileForWrite。この違いの理由は何ですか?

コード:

//ON WINDOWS
typedef wchar_t * FileStr;
int OpenFileForWrite (const FileStr filename)
{   
    return OpenFile (filename, GENERIC_READ | GENERIC_WRITE, 0, OPEN_ALWAYS);
}

int OpenFile (const FileStr filename, ULong func, ULong mode, ULong flag)
{

    if(filehandle_) {
        Close ();
    }

    // Save the mode in which the file was opened
    openmode_ = mode;
    openfunc_ = func;
    openflag_ = flag;

   // open file
   filehandle_ = CreateFile (filename, func, mode, NULL, flag, FILE_ATTRIBUTE_NORMAL, 0);

   //CASE : success to open file.. check for unicode file or not and return
   if ((filehandle_) && (filehandle_ != INVALID_HANDLE_VALUE)) {
       return 0;
   }

   filehandle_  = NULL;

   // not able to open file..set last error
   return GetLastError ();
}


//ON MAC OS X
typedef char * FileStr;
int OpenFileForWrite (const FileStr filename)
{   
    //read, write the file
    // no share
    // Open always
    return OpenFile (filename, O_RDWR|O_CREAT|O_EXCL);
}

int OpenFile (const FileStr filename, Long flag)
{

    if(fd_) {
        Close ();
    }

    openmode_   = flag;

    fd_ = open(filename, flag);

    //CASE : success to open file.. check for unicode file or not and return
    if (fd_ > 0) {
        return 0;
    }

    // not able to open file..set last error
    return error;
}

また、 Mac OS XのオプションFILE_SHARE_READとオプションに相当するものを知りたいです。関数またはその他のシステム コールの動作と使用を達成する方法はありますか?FILE_SHARE_WRITEFILE_SHARE_READFILE_SHARE_WRITEopen

4

0 に答える 0