нам нужно изменить временную папку SYSTEM по умолчанию для нашего мультиплатформенного приложения.
Системный вызов по умолчанию для получения временной папки SYSTEM должен вернуть указанную папку. В MS-Windows это GetTempPath (). На MacOS эта функция называется NSTevenDirectory (), я думаю.
Нам нужно сделать это, потому что мы запускаем несколько экземпляров нашего приложения одновременно. Существуют сторонние библиотеки, использующие неуникальные временные имена файлов, хранящиеся во временной папке SYSTEM.
Для Microsoft Windows и для платформ Unix у нас уже есть решение:
Microsoft Windows:
setenv("TMP", myOwnTempFolder);
tmpFolderToUse=GetTempPath(); // use WinOS API call
Unix:
setenv("TMPDIR", myOwnTempFolder);
tmpFolderToUse = getenv("TMPDIR");
, но это не работает для MacOS (X).
MacOS:
setenv("TMPDIR", myOwnTempFolder);
tmpFolderToUse = NSTemporaryDirectory(); // use MacOS API call
Вызов NSTeilitaryDirectory () всегда возвращает путь по умолчанию впоследствии (как без установки другой папки).
Я пытался вызвать setenv ("...") с TMPDIR, TEMP, TEMPDIR и TMP - но безуспешно в MacOSX.
Для пояснения: вот пример с несколькими экземплярами псевдокода, который в настоящее время реализован для разновидности ОС Windows нашего приложения:
instance1:
tmp=GetTempPath(); // -> 'C:\User\testing\temp'
uuid=getUUID(); // -> 'd7c5df40-d48d-11de-8a39-0800200c9a66'
setenv("TMP", tmp + uuid);
tmp=GetTempPath(); // --> 'C:\User\testing\temp\d7c5df40-d48d-11de-8a39-0800200c9a66'
instance2:
tmp=GetTempPath(); // -> 'C:\User\testing\temp'
uuid=getUUID(); // -> '435aeb10-d48e-11de-8a39-0800200c9a66'
setenv("TMP", tmp + uuid);
tmp=GetTempPath(); // --> 'C:\User\testing\temp\435aeb10-d48e-11de-8a39-0800200c9a66'
Любой совет о том, как добиться такого же поведения в MacOS, будет очень кратким.