Поиск

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


Пытаюсь сделать функцию безопасной перезаписи. Ничего подходящего из сисвызовов не увидел (чтобы после того, как сделаешь 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 без дескрипторов… eddy_em.livejournal.com

Добавить комментарий