2013-06-03 2 views
0

Мне нужно разделить значение переменной, которое изменяется в одной программе для отражения в другой программе. Так я сделал следующее.Как делиться значением переменной между программами C

  1. Созданный файл заголовка:

    /* file1.h */ 
    extern int a = 0; 
    
  2. создал C файл:

    /* file2.c */  
    #include"file1.h" 
    #include<stdio.h> 
    int main() 
    { 
        a = 15; 
        printf("%d",a); 
        return 0; 
    } 
    
  3. создал другой файл C:

    /* file3.c */ 
    #include"file1.h" 
    #include<stdio.h> 
    int main() 
    { 
        printf("%d",a); 
        return 0; 
    } 
    

Я хотел, чтобы программа file3.c напечатала значение 15, но оно выдало результат как 0. Как мне получить значение в программе file3.c?

+0

Проблема в том, что при запуске файла3 вы фактически не выполнили код file2, чтобы установить A. Эти ли они предназначены для самостоятельного запуска? Если это так, вам нужно сохранить значение, например. на диск или использовать какой-то механизм IPC, чтобы передать его между ними. – Rup

+4

'extern' может использоваться для обмена переменными между двумя файлами C, которые являются частью одной и той же программы, но не между двумя различными программами. – interjay

+0

i сначала выполните файл2.c, поэтому значение 'a' установлено. Но когда я запустил file3.c, после этого значение не будет изменено. – Kaushik

ответ

5

Что делает ваш код неправильно, вы пытаетесь использовать переменную между двумя процессами, но то, что вы сделали, - это обмен между двумя исходными файлами, поэтому объявление переменной как extern, безусловно, не поможет вам; потому что это то, что вы делаете, если в одном процессе вы хотите выставить переменную в одном исходном файле в другие исходные файлы.

Естественный способ обмена переменной между двумя (или более) процессами (программами) - это что-то в системах UNIX, называемых shared-memory.

Пожалуйста, ознакомьтесь с этой ссылкой для ознакомления. http://www.cs.cf.ac.uk/Dave/C/node27.html

Edit: Конечно, связь между процессами (как два процесса разговаривать друг с другом) не ограничиваются общей памятью, вы также можете отправить переменные сокетами или через трубу

2

Это невозможно обменять переменную, просто включив файлы. Два исполняемых файла, которые вы будете запускать, будут завершены как два разных процесса, каждый из которых имеет собственное пространство памяти. Таким образом, вы не можете общаться, включив заголовки. Вам придется использовать один из механизмов ipc, предоставляемый вашей ОС, на которой вы работаете. Что-то вроде обмена памятью в unix или очень простой трубе.

Смежные вопросы