когда я пишу
mkdir("~/folder1" , 0777);
в Linux не удалось создать каталог. Если я заменю ~ расширенным домашним каталогом, он будет работать нормально. В чем проблема с использованием ~ ?
Спасибо
когда я пишу
mkdir("~/folder1" , 0777);
в Linux не удалось создать каталог. Если я заменю ~ расширенным домашним каталогом, он будет работать нормально. В чем проблема с использованием ~ ?
Спасибо
~ известно только оболочке, а не системному вызову mkdir.
Но если вы попробуете:
system("mkdir ~/foo");
это работает, поскольку "mkdir ~/foo" передается оболочке, а оболочка расширяет ~ до $HOME
Если вы хотите использовать $HOME с mkdir, вы можете использовать getenv функционирует как:
char path[MAX];
char *home = getenv ("HOME");
if (home != NULL) {
snprintf(path, sizeof(path), "%s/new_dir", home);
// now use path in mkdir
mkdir(path, PERM);
}
home перед вызовом sprintf.
- person R.. GitHub STOP HELPING ICE; 01.09.2010
MAX имеет как минимум такой размер или больше. Эти функции действительно для людей, которые не знают, что они делают. Вот почему их не существовало в прошлом, когда люди умели программировать.
- person Deanie; 06.11.2020
HOME не существует максимальной длины, даже если существует максимум допустимого пути. Написанный код подвержен переполнению буфера, и написание такого неправильного кода прямо противоположно знанию того, как программировать.
- person R.. GitHub STOP HELPING ICE; 06.11.2020
~ — это метасимвол оболочки, а не «ярлык», предоставляемый ядром.
См. wordexp(3) или glob(3) справочные страницы, если вы хотите легко поддерживать ~. (Они могут делать гораздо больше, чем вы хотите.)
glob(3); она не выполняет ~, но все равно полезна.)
- person sarnold; 19.04.2016
GLOB_TILDE (и GLOB_TILDE_CHECK) на этой странице.
- person o11c; 19.04.2016
~ обычно расширяется оболочкой. Неиспользование оболочки означает, что вы несете ответственность за ее расширение.