# странное поведение fopen под макаками

Тема в разделе "LANGS.C", создана пользователем kaspersky, 26 мар 2009.

  1. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    имеется код следующего вида:

    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?! странно все это.

    какие будут идеи?
     
  2. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    kaspersky
    Абсолютно ничего не знаю про MacOS, но, если местный командный интерпретатор преобрабатывает дикие карточки, то он и перебирает файлы. Почему бы и нет? Соответственно и fopen совсем не обязан для такого поведения поддерживать *.* (и как бы вообще подобная поддержка могла выглядеть ?-| ) .
     
  3. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    то есть ты предполагаешь, что маковский командный интерпретатор парсит командую строку, находит в ней *.* и начинает вызывать программу много раз с разными именами файлами? это все объясняет, но в этом случае непонятно как тогда передать *.* самой _программе_ ?! ведь запуск программы - операция не из дешевых. а вот внутри программы перебор файлов действует быстро...

    гм, надо будет проверить сколько раз запускалась программа...
     
  4. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    kaspersky
    ИМХО вполне вероятно.
    Эм... может кавычки? (конкурс ясновидящих, не знакомых с MacOS :) )
     
  5. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    короче макака она макака и есть ;) поубивал бы (с)
     
  6. s0larian

    s0larian New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    489
    Адрес:
    Крыжёпполь
    Unix shell производит эти прерации до вызова проги. То есть, много лет назад было решено что проги должны быть проще, и эта логика должна быть в shell: "ls something*"

    что б жто выключить, сделай escape: my_prog '*'
     
  7. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    s0larian
    +1
     
  8. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    И после этого КК утверждает, что его любимая ОС -- Unix (FreeBSD) ;)
     
  9. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    kaspersky

    Макось это FreeBSD
     
  10. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    censored
    > И после этого КК утверждает, что его любимая ОС -- Unix (FreeBSD) ;)
    и продолжаю утверждать ;) просто меня больше интересует ядро ;)