2014-09-01 2 views
0

프로그램을 시작할 때 명령 행 옵션을 구문 분석하려면 getopt()를 사용하십시오. 그러나 프로그램이 이미 백그라운드에서 실행중인 경우 어떻게합니까? 나는 정보를 찾을 수 없었다. 예를 들어 서버를 실행 중이지만 제대로 작동하는 방식으로 변경하려고한다고 가정 해 보겠습니다. 그것을하는 방법? 나는 리눅스에서 이것을하고 싶다.C로 이미 실행중인 프로그램에서 명령을 전달하는 방법

답변

2

이렇게하는 데 플랫폼 독립적 인 방법은 없습니다. C 프로그래밍 언어는 실행중인 프로그램과 통신하기위한 메커니즘을 지정하지 않습니다 (또는 존재 성을 요구합니다).

플랫폼 특정 코드 또는 플랫폼을 자체 휴대용으로 추상화하는 기존 라이브러리를 찾아야합니다.

Linux의 경우 Unix domain socket이이를 구현하는 한 가지 방법입니다. 다른 하나는 공유 메모리입니다.

+0

BTW를 사용하면 프로그램을 특수 HTTP 서버로 만들 수 있습니다 (예 : [libonion] (http://www.coralbits.com/libonion/) ...과 같은 일부 HTTP 서버 라이브러리 사용). 사용자는 프로그램과 통신하기 위해 특별한 URL을 열 수 있습니다. –

1

Un * x 사용자는 many options입니다.

FIFO 파이프 구현하는 합리적이고 쉽게 보이는 :

1

이 당신이 할 수있는 몇 가지 방법이 있지만, 그들은 모두 공통 주제를 가지고 - 프로세스 간 통신을.

필자가 선호하는 방법은 일종의 소켓을 사용하는 것입니다 (일반적으로 요즘은 이러한 목적으로 ZMQ를 사용하지만 요즘은 ZMQ를 사용하기 전에 일반적으로 소켓을 읽습니다). Windows 또는 Unix에 의존하는지 여부에 따라 사용할 수있는 소켓 종류가 결정됩니다.

공유 메모리와 같은 다른 방법도 있습니다.하지만 "서버"에 대해 언급 했으므로 소켓이 가장 좋습니다. 나는 당신이 "클라이언트 서버 모델"을 연구 할 것을 제안한다.

0

내가 사용한 서버 중 가장 간단한 해결책은 파일을 만들고 서버에 10 초에 한 번씩 파일을 읽도록 요청하는 것입니다. 거기에 명령을 내려 놔. 그것은 크로스 플랫폼입니다.)
크로스 플랫폼 솔루션은 동시성 (예 : pthread) 또는 C++ (스레드 및 뮤텍스 라이브러리)의 새로운 표준을 사용하기 위해 몇 가지 표준 라이브러리를 사용하는 것입니다. 다른 명령은 뭔가를 실행하는 동안 일부 명령을 기다릴 스레드를 만듭니다.

0

구성 파일을 사용하여 프로그램에서 해당 파일의 변경 사항을 수신하도록 할 수 있습니다.

Linux에서 프로그래밍하는 경우 inotify (#include <linux/inotify.h>)를 사용할 수 있습니다.

MacOS/iOS에서는 FSEvents를 사용합니다.

Windows의 경우 FindFirstChangeNotification을 사용하십시오.

관련 문제