我在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