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_WRITE
FILE_SHARE_READ
FILE_SHARE_WRITE
open