Емельянов Эдуард Владимирович (eddy_em) wrote,
Емельянов Эдуард Владимирович
eddy_em

Ну вообще лыжи не едут!

Пытаюсь сделать функцию безопасной перезаписи. Ничего подходящего из сисвызовов не увидел (чтобы после того, как сделаешь unlink, вернуть файлу предыдущее имя), поэтому решил сделать файлу link на новое имя, unlink на старое, а если запись в старое имя выдаст ошибку, обратно перелинковать.
И не тут-то было! Пишу:
bool FITS_rewrite(FITS *fits){
    FNAME();
    char *nm = tmpnam(NULL);
    if(!nm){WARN("tmpnam()"); return FALSE;}
    char *fnm = strrchr(nm, '/');
    if(!fnm){WARN("tmpnam()"); return FALSE;}
    ++fnm;
    DBG("make double: %s -> %s", fits->filename, fnm);
    if(link(fits->filename, fnm)){
        WARN("link()");
        return FALSE;
    }
    return TRUE;
}

(все остальное допишу дальше, сначала хочу проверить работу link), и у меня создается символическая ссылка вместо жесткой!
Вот же ядрен батон!!! Как это?
UPD: точно лыжи не едут, спать надо ложиться! Я пытался сделать линк на симлинк! Понятно, что появляется новый симлинк. Все ОК. Надо лечиться.
А потом уже разбираться, как мне сделать аналог команды linkat без дескрипторов...
Upd2. А ведь с перезаписью содержимого файла, открытого по симлинку, не все так просто. Буду искать варианты. Как-то я раньше никогда этим не заморачивался...
Tags: c
Subscribe

  • Что-то не выходит с RGB-панелью

    Мне подсказали, что у моей панели P4 используется протокол HUB75E. Нигде не смог найти официальных документов на этот протокол - только всякие…

  • Новый кикад - просто ужас!

    Пока маюсь дурью под Звенигородом, решил было поработать. Но оказалось, что кикад я давно не пересобирал и после последнего обновления системы он не…

  • Хочется взять, и…

    Что-то последнее время чем дальше в лес все больше и больше падает грамотность интернет-пользователей. Похоже, из-за появления дешевых…

promo eddy_em august 17, 2019 12:33 3
Buy for 10 tokens
Юра намедни напечатал корпус для хронометра. Для первого блина получилось неплохо: И еще немного фотографий:
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic
  • 2 comments