我在C長時間運行的程序在Linux下:如何從一個程序與另一個長時間運行的程序進行通信?
longrun.c
#include <stdio.h>
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
我需要用C寫另一個程序(有些東西一樣changemode.c
),以便它可以與longrun.c
進行通信並將其模式值設置爲某個其他值,以便正在運行的程序將以增量順序顯示值 2.
即,如果我一些x分鐘後運行程序,它會在此模式中顯示:
run @ mode 0 value : nnn
run @ mode 0 value : nnn+2
run @ mode 0 value : (nnn+2)+2
我可以用文件的方法做到這一點changemode.c將創建一個文件稱mode = 2 然後longrun.c將每次打開並檢查並繼續。還有其他更好的解決方法,比如進程間通信嗎?
如果可能的話,任何人都可以寫一個changemode.c的樣本?
你有沒有用Google搜索或看着維基百科[進程間通信(http://en.wikipedia.org/wiki/Inter-process_communication)?有很多方法來完成這個。至於socket通信,我用從http://www.linuxhowtos.org/C_C++/socket.htm幾次示例程序。或者,你的文件的建議,堅持,你可以使用[inotify的(http://www.ibm.com/developerworks/linux/library/l-ubuntu-inotify/index.html)得到一點花哨。請記住其中一些操作的阻塞/非阻塞功能。 – Macattack
你真的不需要寫changemod.c可言。只需讓當前的pgm打開(非阻塞)一個FIFO。定期讀取FIFO(或使用'select'來告訴你何時讀取)。另一方面,您可以從命令行寫入FIFO。 – Duck