Ваш код с проверкой ошибок:
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
int saveHistoryToFile(char *history);
int main(int argc, char **argv){
char *something = "hello";
if(0>saveHistoryToFile(something)) return 1;
if(0>fclose(stdout)) return perror("fclose"),-1;
}
int saveHistoryToFile(char *history){
int fw = open("history.txt",O_WRONLY | O_APPEND /*|O_CREAT, 0640*/ );
if (0>fw) return perror("open"),-1;
if (0>dup2(fw, 1)) return perror("dup2"),-1;
if (0>(printf("%s", history))) return perror("printf"),-1;
}
При первом запуске я получаю "open: Нет такого файла или каталога", потому что у меня нет "history.txt"
в моем текущем каталоге.
Если я добавлю или раскомментирую O_CREAT, 0640
, на моем компьютере он будет работать нормально.
Конечно, вы можете столкнуться с другими проблемами (например, EPERM
), но perror
s следуетдать вам подсказку.