April 2032
|
|
|
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
|
10/29/03 04:38 pm
программазмы / dos2unix
Говно, а не программа! © ОСП студия.
В общем, в операционных системах UNIX, DOS/Windows и MAC конец строки в текстовом файле обозначается по-разному (есть тому исторические причины, не буду вдаваться). Поэтому люди написали специальную программулину, которая преобразует текстовые файлы из одного формата в другой. Называется - dos2unix.
Собственно, эта прога должна делать очень простую вещь - по всему файлу два подряд идущих символа c кодами 10, 13 заменять на один символ с кодом 10. И она-таки с этим не справляется!
А всё потому, что результат своей работы она записывает во временный файл, находящийся в текущем каталоге. Далее она дёргает системный вызов rename для переименования временного файла в тот, оригинальный. Несложно догадаться, что произойдет в случае, если эти два файла лежат в разных файловых системах. Нельзя переименовать файл на другую файловую систему - его можно туда только скопировать!
В общем, оно вываливается с невразумительной ошибкой.
Так не пишите программы никто.
10/29/03, 09:45 am
не надо в меня RTFMами тыкать :)
tr -d '\r'
я всегда так и делаю. просто это был чужой спек-файл, я пытался его использовать. переписал как раз на tr.
10/29/03, 09:57 am
Ндаа.. Ну что я могу тебе сказать??
"Используйте правильные дистрибутивы" :) Хотя я повторяюсь...
10/29/03, 10:00 am
Думаешь, в правильных дистрибутивах при сборке нигде не может (в принципе) использоваться dos2unix или подобный ему PoS?
10/29/03, 10:07 am
bacek@bacek:~/src$ apt-get source sim Reading Package Lists... Done Building Dependency Tree... Done Need to get 1712kB of source archives. Get:1 http://ftp.fi.debian.org unstable/main sim 0.8.3-2 (dsc) [747B] Get:2 http://ftp.fi.debian.org unstable/main sim 0.8.3-2 (tar) [1627kB] Get:3 http://ftp.fi.debian.org unstable/main sim 0.8.3-2 (diff) [84,6kB] Fetched 1712kB in 1s (1596kB/s) dpkg-source: extracting sim in sim-0.8.3 bacek@bacek:~/src$ cd sim-0.8.3/ bacek@bacek:~/src/sim-0.8.3$ grep -r dos2unix * bacek@bacek:~/src/sim-0.8.3$
За весь дистрибутив конечно не скажу, но...
10/29/03, 11:02 am
в 0.8.3 у меня этого тоже не было. это в 0.9pre (в asplinux-contribs (или -devel? не важно)), да и то я уже намекнул ментейнеру, и он это поправит.
10/29/03, 09:59 am
Вы с bacek@lj сговорились?
Я не спрашивал, какую можно придумать замену. Я, собственно, писал о том, что оно говно и что "так не делайте никто".
10/29/03, 02:11 pm
А зачем он его во временную директорию пишет? Вопрос, в общем-то, риторический ;)
По мне так на C и других низкоуровневых языках нужно писать только основной функционал, а остальное на шелле - OS и шелл лучше всего знают как с файликами и потоками общаться и знают все но для файловых систем и т.д.
На самом деле не напрягайся ты - с тех пор как компьютер стал для домохозяет столько софта криво написано что опухнуть можно и если вместо того чтобы каждый раз нервничать просто брать и править (благо OpenSource нам позволяет), то прогресс будет идти раза в два-три быстрее. ;)
10/29/03, 03:30 pm
1. Во временный файл он его пишет правильно. Но вот почему в текущий каталог, а не, к примеру, в тот - не знаю. К тому же, я подозреваю, если переименование файла удастся, то запорются permissions на оригинальный файл (чего можно избежать, если открыть оригинальный файл и вписать туда содержимое временного).
2. Такую гнусную программу (у неё, кстати, версия аж 3.1!) даже и править не хочется. Какие-то студенты первого курса писали (вероятно, те из них, которые не умели написать простую строчку на tr/sed/perl/etc.).
|