eddy_em: (Default)
[personal profile] 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 без дескрипторов...
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org

October 2025

S M T W T F S
   1234
567 89 1011
121314 15161718
19202122232425
2627 28293031 

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Feb. 25th, 2026 12:15 pm
Powered by Dreamwidth Studios