флаг O_CREAT не создает файл - PullRequest
0 голосов
/ 23 февраля 2019

У меня есть программа, которая пытается создать файл и записать в него, но по какой-то причине, когда я использую флаг O_CREAT, я получаю ошибку

Нет такого файла или каталога

Часть кода, которая создает ошибку:

(char *) datafile = malloc(30);
strcpy(datafile, "~/Desktop/notes");
fd =  open(datafile, O_CREAT | O_WRONLY | O_APPEND, S_IRUSR | S_IWUSR); <----- here I get the error

1 Ответ

0 голосов
/ 23 февраля 2019
"~/Desktop/notes"

Там нет каталога с именем ~.Некоторые программы (особенно оболочки типа bash) расширяют ~ до домашнего каталога текущего пользователя, но open не является оболочкой и не будет этого делать.

Если вам нужен относительный путьв домашний каталог вы можете сделать что-то вроде:

char* home = getenv("HOME");
if (home) {
     strcpy(datafile, home);
     strcat(datafile, "/Desktop/notes");
     ...
} else {
    ... report an error
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...