имеется код следующего вида: main(int c, char **v) { хылшзъ printf(dbg_chk_file, fname); if (!(f = fopen(v[1], "rb"))) return printf(err_cnt_open, fname); if ((n = fread(p, 1, MAX_FILE_SIZE, f)) == MAX_FILE_SIZE) return printf(err_too_big, fname); if (n <= MIN_FILE_SIZE) return printf(err_too_smll, fname); хылшзъ fclose(f); } коллега скопилила под мак осью и запустила prog *.*, программа мистическим образом стала хавать все файлы. мыщъх в осадке. совершенно не понимаю как это может быть возможно?! это не глюк и не накурка, а реальная черная магия. как это может работать? ведь не должно. даже если fopen имеет реализацию поддерживающую *.*, то кто будет мотать ffirst/fnext?! странно все это. какие будут идеи?
kaspersky Абсолютно ничего не знаю про MacOS, но, если местный командный интерпретатор преобрабатывает дикие карточки, то он и перебирает файлы. Почему бы и нет? Соответственно и fopen совсем не обязан для такого поведения поддерживать *.* (и как бы вообще подобная поддержка могла выглядеть ?-| ) .
то есть ты предполагаешь, что маковский командный интерпретатор парсит командую строку, находит в ней *.* и начинает вызывать программу много раз с разными именами файлами? это все объясняет, но в этом случае непонятно как тогда передать *.* самой _программе_ ?! ведь запуск программы - операция не из дешевых. а вот внутри программы перебор файлов действует быстро... гм, надо будет проверить сколько раз запускалась программа...
Unix shell производит эти прерации до вызова проги. То есть, много лет назад было решено что проги должны быть проще, и эта логика должна быть в shell: "ls something*" что б жто выключить, сделай escape: my_prog '*'
censored > И после этого КК утверждает, что его любимая ОС -- Unix (FreeBSD) и продолжаю утверждать просто меня больше интересует ядро