[英]How to communicate from one program to another long running program?
我在Linux下的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
類的changemode.c
),以便它可以與longrun.c
通信並將其mode的值設置為其他值,以便正在運行的程序將按以下順序遞增顯示值: 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的樣本嗎?
如其他答案所述,您需要某種進程間通信。 您可以在“ Beej Unix IPC指南”(這是“經典”)中找到有關該主題的更多信息,可在以下位置找到:
費爾南多
該解決方案包括兩個部分:
兩個進程之間的通信通道。 Unix域套接字是一個很好的工具,它們的行為類似於TCP / IP套接字。
用select
代替sleep
。 select
將偵聽套接字,處理與其他程序的通信。 您還可以指定3秒鍾的超時,因此當它返回0(意味着套接字上沒有活動)時,您就知道該打印一些輸出了。
作為#2的替代方案,您可以使用兩個線程-一個線程休眠並產生輸出,另一個線程處理套接字。 請注意,線程共享的任何數據都應該同步(在非常簡單的情況下,只有一個整數,您可能不需要任何東西,但是當它變得更復雜時,您肯定會這樣做)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.