вопрос о многопроцессорности и статических переменных в C

#c #variables #static

#c #переменные #статические

Вопрос:

У меня возникла некоторая проблема с проектом на C. Ситуация следующая:

  1. У меня есть основной файл, который включает file .h со статическими переменными и другой файл C со всеми функциями (сюда также входит file .h).
  2. Если я запускаю main, он работает нормально, но я хотел бы запускать разные экземпляры в разных оболочках, чтобы я мог обмениваться сообщениями.

Проблема в том, что оба процесса выделяют статические переменные в одном и том же расположении памяти, поэтому операции, выполняемые вторым экземпляром, будут перезаписывать операции первого экземпляра.

Надеюсь, я ясно выразился, я не очень разбираюсь в C.

Ответ №1:

Вы не можете использовать статическую переменную для обмена данными между двумя процессами. Адреса, которые вы видите, с большой вероятностью будут виртуальными, т. Е. каждый процесс имеет свое собственное адресное пространство, поэтому, хотя адрес может выглядеть идентичным, на самом деле он отображается в другой оперативной памяти.

Вам нужно реальное решение для межпроцессного взаимодействия (IPC), такое как файлы, общая память, каналы, сокеты или аналогичный подход.

Комментарии:

1. Для ясности: статические переменные не являются общими для процессов. Они просто являются общими для всех библиотек и объектных файлов, связанных с одним и тем же процессом.

Ответ №2:

Это не так. Каждый процесс получает свое собственное совершенно отдельное адресное пространство, поэтому они не могут перезаписывать друг друга.