Бір бағдарламадан екінші ұзақ бағдарламаға қалай қатынасуға болады?

Linux-дегі C бағдарламасында ұзақ жұмыс істеймін:

longrun.c

#include 
int main()
{
    int mode=0;
    int c=0;
    while(1)
    {
        printf("\nrun @ mode %d value : %d ",mode,c );
        if (c>100)
            c=0;
        if(mode==0)
            c++;
        else
            c=c+2;
        sleep(3);
    }
    return 0;
}

Ол көрсетіледі

run @ mode 0 value : 0 
run @ mode 0 value : 1 
run @ mode 0 value : 2 

longrun.c -ге хабарласу үшін C-да басқа бағдарламаны жазу керек ( changemode.c сияқты) және іске қосылған бағдарлама үшін оның мәнін басқа мәнге орнатыңыз 2 инкремент ретіндегі индикаторлық мәндер.

I.e., if I am running the program after some x minutes , Ол көрсетіледіin this pattern:

run @ mode 0 value : nnn 
run @ mode 0 value : nnn+2
run @ mode 0 value : (nnn+2)+2

I can do it using file method the changemode.c will create a file saying mode =2 then the longrun.cwill everytime open and check and proceed. Is there some other better way to solve this, like interprocess communication?

Мүмкін болса, changemode.c үлгісін жаза алады ма?

0
Шын мәнінде changemod.c мүлде жазудың қажеті жоқ. Тек ағымдағы pgm ашық (бұғаттау) FIFO. FIFO-ды мезгіл-мезгіл оқып шығыңыз (немесе оқу үшін таңдау пайдаланыңыз). Екінші жағынан командалық жолдан FIFO-ға жаза аласыз.
қосылды автор Duck, көзі
Шын мәнінде changemod.c мүлде жазудың қажеті жоқ. Тек ағымдағы pgm ашық (бұғаттау) FIFO. FIFO-ды мезгіл-мезгіл оқып шығыңыз (немесе оқу үшін таңдау пайдаланыңыз). Екінші жағынан командалық жолдан FIFO-ға жаза аласыз.
қосылды автор Duck, көзі
Шын мәнінде changemod.c мүлде жазудың қажеті жоқ. Тек ағымдағы pgm ашық (бұғаттау) FIFO. FIFO-ды мезгіл-мезгіл оқып шығыңыз (немесе оқу үшін таңдау пайдаланыңыз). Екінші жағынан командалық жолдан FIFO-ға жаза аласыз.
қосылды автор Duck, көзі
процесстер арасындағы қарым-қатынас үшін википедияны қарап шықтыңыз ба? Мұны жүзеге асырудың көптеген әдістері бар. Розетка байланысына байланысты, мен linuxhowtos.org/C_C++/socket мысал бағдарламаларын қолдандым. htm бірнеше рет. Немесе, файлыңыздың ұсынысымен ұстану үшін inotify кішкене қиялды алу үшін. Бұл әрекеттердің кейбірін блоктау/блоктау мүмкіндігін есте сақтаңыз.
қосылды автор Macattack, көзі
процесстер арасындағы қарым-қатынас үшін википедияны қарап шықтыңыз ба? Мұны жүзеге асырудың көптеген әдістері бар. Розетка байланысына байланысты, мен linuxhowtos.org/C_C++/socket мысал бағдарламаларын қолдандым. htm бірнеше рет. Немесе, файлыңыздың ұсынысымен ұстану үшін inotify кішкене қиялды алу үшін. Бұл әрекеттердің кейбірін блоктау/блоктау мүмкіндігін есте сақтаңыз.
қосылды автор Macattack, көзі

11 жауаптар

Шешім екі бөліктен тұрады:

  1. Екі процестің арасындағы байланыс арнасы. Unix Domain Sockets - бұл жақсы құрал және олар TCP/IP сокеттерімен ұқсас әрекет етеді.

  2. ұйқы дегенді таңдау көмегімен ауыстыру. select розеткада тыңдайды, басқа бағдарламамен байланыс жасайды. Сондай-ақ, 3 секундтық тайм-аут көрсетілуіне болады, сондықтан ол 0 мәнін қайтарғанда (розеткада ешқандай әрекет болмайды), сіз кейбір шығарылымды басып шығарудың уақыты келді деп білесіз.

№2 балама ретінде сіз екі жіпті қолдануға болады - бір ұйықтау және шығу, екіншісі розетка арқылы жұмыс жасай аласыз. Ағындармен бөлісетін кез-келген деректерді синхрондалатынын ескеріңіз (өте қарапайым жағдайда, бір ғана бүтін сан бар, сіз ештеңе керек емес, бірақ сіз күрделі болып жатқанда сенімді боласыз).

0
қосылды

Шешім екі бөліктен тұрады:

  1. Екі процестің арасындағы байланыс арнасы. Unix Domain Sockets - бұл жақсы құрал және олар TCP/IP сокеттерімен ұқсас әрекет етеді.

  2. ұйқы дегенді таңдау көмегімен ауыстыру. select розеткада тыңдайды, басқа бағдарламамен байланыс жасайды. Сондай-ақ, 3 секундтық тайм-аут көрсетілуіне болады, сондықтан ол 0 мәнін қайтарғанда (розеткада ешқандай әрекет болмайды), сіз кейбір шығарылымды басып шығарудың уақыты келді деп білесіз.

№2 балама ретінде сіз екі жіпті қолдануға болады - бір ұйықтау және шығу, екіншісі розетка арқылы жұмыс жасай аласыз. Ағындармен бөлісетін кез-келген деректерді синхрондалатынын ескеріңіз (өте қарапайым жағдайда, бір ғана бүтін сан бар, сіз ештеңе керек емес, бірақ сіз күрделі болып жатқанда сенімді боласыз).

0
қосылды

Шешім екі бөліктен тұрады:

  1. Екі процестің арасындағы байланыс арнасы. Unix Domain Sockets - бұл жақсы құрал және олар TCP/IP сокеттерімен ұқсас әрекет етеді.

  2. ұйқы дегенді таңдау көмегімен ауыстыру. select розеткада тыңдайды, басқа бағдарламамен байланыс жасайды. Сондай-ақ, 3 секундтық тайм-аут көрсетілуіне болады, сондықтан ол 0 мәнін қайтарғанда (розеткада ешқандай әрекет болмайды), сіз кейбір шығарылымды басып шығарудың уақыты келді деп білесіз.

№2 балама ретінде сіз екі жіпті қолдануға болады - бір ұйықтау және шығу, екіншісі розетка арқылы жұмыс жасай аласыз. Ағындармен бөлісетін кез-келген деректерді синхрондалатынын ескеріңіз (өте қарапайым жағдайда, бір ғана бүтін сан бар, сіз ештеңе керек емес, бірақ сіз күрделі болып жатқанда сенімді боласыз).

0
қосылды

Unix бағдарламалауында ең негізгі идеялардың бірі - бұл екі процестің арасында құбырларды жасау және өңдеу. longrun құбырды жасау арқылы бастауға болатын, fork және ата-аналық процесті changemode «monitor» ретінде пайдалану арқылы, және longrun функциясын қолданған кезде еншілес процесс. Сіз кез-келген уақытта мезгіл-мезгіл оқу/жазуды қажет етеді.

Google іздеу көптеген мысалдар қайтарады. Басқа .

0
қосылды

Unix бағдарламалауында ең негізгі идеялардың бірі - бұл екі процестің арасында құбырларды жасау және өңдеу. longrun құбырды жасау арқылы бастауға болатын, fork және ата-аналық процесті changemode «monitor» ретінде пайдалану арқылы, және longrun функциясын қолданған кезде еншілес процесс. Сіз кез-келген уақытта мезгіл-мезгіл оқу/жазуды қажет етеді.

Google іздеу көптеген мысалдар қайтарады. Басқа .

0
қосылды

Unix бағдарламалауында ең негізгі идеялардың бірі - бұл екі процестің арасында құбырларды жасау және өңдеу. longrun құбырды жасау арқылы бастауға болатын, fork және ата-аналық процесті changemode «monitor» ретінде пайдалану арқылы, және longrun функциясын қолданған кезде еншілес процесс. Сіз кез-келген уақытта мезгіл-мезгіл оқу/жазуды қажет етеді.

Google іздеу көптеген мысалдар қайтарады. Басқа .

0
қосылды

Unix бағдарламалауында ең негізгі идеялардың бірі - бұл екі процестің арасында құбырларды жасау және өңдеу. longrun құбырды жасау арқылы бастауға болатын, fork және ата-аналық процесті changemode «monitor» ретінде пайдалану арқылы, және longrun функциясын қолданған кезде еншілес процесс. Сіз кез-келген уақытта мезгіл-мезгіл оқу/жазуды қажет етеді.

Google іздеу көптеген мысалдар қайтарады. Басқа .

0
қосылды

Басқа жауаптарда айтылғандай, сіз интерактивті процестің қандай да бір түрін қажет етеді. Осы тақырып бойынша қосымша ақпаратты «Unix IPC-ға арналған Beej нұсқаулығы» (бұл «классикалық») -те таба аласыз:

http://beej.us/guide/bgipc/

Фернандо

0
қосылды

Басқа жауаптарда айтылғандай, сіз интерактивті процестің қандай да бір түрін қажет етеді. Осы тақырып бойынша қосымша ақпаратты «Unix IPC-ға арналған Beej нұсқаулығы» (бұл «классикалық») -те таба аласыз:

http://beej.us/guide/bgipc/

Фернандо

0
қосылды

Басқа жауаптарда айтылғандай, сіз интерактивті процестің қандай да бір түрін қажет етеді. Осы тақырып бойынша қосымша ақпаратты «Unix IPC-ға арналған Beej нұсқаулығы» (бұл «классикалық») -те таба аласыз:

http://beej.us/guide/bgipc/

Фернандо

0
қосылды

Басқа жауаптарда айтылғандай, сіз интерактивті процестің қандай да бір түрін қажет етеді. Осы тақырып бойынша қосымша ақпаратты «Unix IPC-ға арналған Beej нұсқаулығы» (бұл «классикалық») -те таба аласыз:

http://beej.us/guide/bgipc/

Фернандо

0
қосылды