работа с переменными языка СИ

Тема в разделе "LANGS.C", создана пользователем Sasha1111, 12 окт 2011.

  1. Sasha1111

    Sasha1111 New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2011
    Сообщения:
    2
    как сделать так чтобы при запуске программы например GLOB_exe
    переменная int var_glob увеличивалась на один и выводила ее содержание

    пример запуска :
    ./GLOB_exe //первый запуск
    результат = 0
    ./GLOB_exe //второй запуск
    результат = 1
    ./GLOB_exe //третий запуск
    результат = 2
    ./GLOB_exe //четвертый запуск
    результат = 3

    ????? помогите .
     
  2. LeaLNoFiE

    LeaLNoFiE New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2011
    Сообщения:
    23
    Есть вариант сохранять переменную в файл, после считывать, и проводить необходимые манипуляции. Второй вариант, запускать программу как дочерний процесс с передачей параметров. Также можно устанавливать соединение с программой в котрой храняться данные нужные данные и получать их с помошью сокетов или пайпов, ну и еще вариант хранить данные в БД, например MySQL
     
  3. Sasha1111

    Sasha1111 New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2011
    Сообщения:
    2
    а возможен такой вариант хранения значения в переменных окружения ?

    а вообще мне надо сделать так чтобы после пятого запуска программа выдавала сообщение о том что запуск не возможен .
     
  4. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Sasha1111
    Юзайте именованные объекты системы. Ну к примеру Named Shared Memory.
     
  5. LeaLNoFiE

    LeaLNoFiE New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2011
    Сообщения:
    23
    В переменных окружения хранить можно но не желательно, так как там в основном храниться ситемная информация.
     
  6. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    AddGlobalAtom, если речь про Винду.
     
  7. Dmitry_Milk

    Dmitry_Milk Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    540
    Реестр. Не?
     
  8. LeaLNoFiE

    LeaLNoFiE New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2011
    Сообщения:
    23
    Насколько я понимаю, ТС програмирует под Linux.
     
  9. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    Sasha1111
    Нет. Переменные окружения копируются от родительского процесса дочернему в момент создания этого дочернего процесса. И наша программа, которая дочерний процесс шелла, должна менять значения переменных окружения в родительском процессе, чтобы эти изменения коснулись бы последующих запусков.

    Заведи файлик с именем $HOME/.GLOB_exe.rc и храни там число запусков.
     
  10. herm1t

    herm1t New Member

    Публикаций:
    0
    Регистрация:
    1 янв 2004
    Сообщения:
    22
    А кто мешает исправить значение переменной в бинаре?
     
  11. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Тоже самое, что мешает вытащить себя за волосы. Выполняемый файл закрыт на запись в момент выполнения.
     
  12. razor

    razor Member

    Публикаций:
    0
    Регистрация:
    2 июл 2004
    Сообщения:
    40
    в windows, да, закрыт
    в UNIX-системах нет
     
  13. herm1t

    herm1t New Member

    Публикаций:
    0
    Регистрация:
    1 янв 2004
    Сообщения:
    22
    Отмапить файл из памяти (или подождать завершения процесса-родителя), а потом - меняй, что хочешь.
    Для Linux. Для винды - посмотрите, как устроены самоудаляющиеся exe-шки.
     
  14. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    herm1t
    Любите сложные пути? Которые работают лишь иногда? И отказываются работать тогда, когда бинарь запущен без прав записи "в себя"? Кстати это наиболее распространённая ситуация в *nix: все бинари имеют владельца root и писать в них может только он, а запускаются процессы от имени других пользователей.

    Надо просто создать файлик, и в нём хранить количество записей. Если этот способ слишком прост для столь продвинутой аудитории, то существуют библиотеки типа gconf и пр., которые хранят бд настроек программ.
     
  15. pashe4ka13

    pashe4ka13 New Member

    Публикаций:
    0
    Регистрация:
    4 окт 2010
    Сообщения:
    263
    herm1t
    И где это можно посмотреть не скажите?
     
  16. Dmitry_Milk

    Dmitry_Milk Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    540
    Под виндами - самоудаление и самопереименование экзешников это ведь не самоизменение. Содержимое выполняющегося в данный момент exe-файла однозначно недоступно для записи, хотя переименовать его в этот момент возможно (насчет удалить точно не знаю).

    Интересно было бы услышать исходную цель топикстартера - для чего ему надо подсчитывать количество запусков? И почему ему не годится простой и очевидный способ - через файл данных в директории экзешника, например? Может быть вообще его исходная задача решается не подсчетом количества запусков, а каким-то другим путем?
     
  17. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    ну кроме наверное только записи секторов жесткого диска напрямую)))
     
  18. pashe4ka13

    pashe4ka13 New Member

    Публикаций:
    0
    Регистрация:
    4 окт 2010
    Сообщения:
    263
    Dmitry_Milk
    Я пробовал закрывать все открытые хендлы, размапливать фаил и вызывать NtDeleteFile результат C0000121 STATUS_CANNOT_DELETE. В старых версиях винды такое говорят работало.
    Я думаю он хочет сделать, что то типа защиты, например что бы его прогу можно было опробовать пять раз, а на шестой она должна будет просить вас оплатить её для дальнейшей работы.
     
  19. Dmitry_Milk

    Dmitry_Milk Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    540
    Кстати, в догонку, а есть какие-нибудь готовые библиотечные решения для эмуляции персистентных данных как обычных оперативных? То есть, программа работает с нектоторым объектом или переменной как будто с обычной переменной, но тем не менее значение переменной в какие-то моменты времени синхронизируется со значением в какой-то внешней базе или файле, и чтоб происходило это прозрачно для пользовательской программы?

    Или фактически достаточно маппинга файла на память?
     
  20. green5

    green5 New Member

    Публикаций:
    0
    Регистрация:
    5 янв 2006
    Сообщения:
    29
    Адрес:
    Protvino
    Под Х счетчик хранить в prop окошка какогонибуть