Я переношу библиотеку C на OSX, что до сих пор не доставляло мне особых головных болей. В следующей функции:
int createDirectory( char *directory ){
int error;
error = mkdir(directory, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
if( error < 0 ){
if( errno != EEXIST ){
return errno;
}
}
return error;
}
Независимо от того, что такое directory
, mkdir()
всегда терпит неудачу с EPERM
(операция не разрешена). Я не уверен, что исполняемый файл xcode находится в песочнице или я что-то упускаю, но каждый путь, который я передаю функции, терпит неудачу.
Я пробовал mkdir из терминала, и папки создаются без проблем, поэтому я не уверен, в чем проблема. Эта функция прекрасно работает в Linux и Solaris.
Примеры путей:
"~/Library/Application\\ Support/myApp"
"~/Desktop/myApp"
Первый — реальный пример каталога, который должна создать библиотека.
~
-расширение — это оболочка. Попробуйте без этого. - person Mat   schedule 17.05.2015$HOME
и замените ею~
. - person trojanfoe   schedule 17.05.2015EPERM
? Действительно? Это интересно, поскольку этот код ошибки не является документом дляmkdir()
: developer.apple.com/library/mac/documentation/Darwin/Reference/ Я ожидалENOENT
. - person alk   schedule 17.05.2015~
, попытка экранировать пробел с обратной косой чертой, а затем экранировать обратную косую черту является неправильной. Первый относится к оболочке и не подходит для программы на C (если только аргументы форматирования не передаются в оболочку). Путь с пробелом должен быть просто написан нормально:"/a/path/with some spaces/in/it"
. - person Ken Thomases   schedule 17.05.2015