C에서 다른프로그램이 printf로 출력하는 모든 메세제지를 켑쳐하는 방법 없나요?
한 프로그램이 있는데 계속해서 메세지를 printf로 출력합니다.
제가 만들고 싶은 프로그램은 위의 프로그램이 메세지를 출력할때마다
켑쳐해서 소켓으로 전송하는 프로그램을 만들려고 하는데요.
어떻게 프로그램을 만들어야 하나요?
1. printf를 출력하는 터미널의 tty 디바이스 파일을 알아본다. 2. 해당 tty를 수퍼유저로 연다. 3. 읽어서 소켓으로 전송한다.
------------------ P.S. -------------- 지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
만약 제가 그런 상황에 처했다면, 다음과 같은 방법을 상용 하겠습니다. 먼저 네트웍으로 어떤 데이타를 전송해야 하는 프로그램에 외부 프로그램을 호출 할수 잇는 부분을 추가 합니다. exec계열의 함수가 적당하것 같습니다. 이 부분에서 외부 프로그램을 호출 합니다.
그리고 호출 하기 이전에, 파이프와 fcntl()혹은 dup2()와 같은 것을 이용하여, 출력 파일 디스크립터를 바꾸어 주겠습니다.
즉 대충 생각 나는대로 프로그램소스를 만들어 보면 아래의 식이 되겠죠...
void function() { int pfd[2]; /* 파이프 오픈 */ int pid; char buf[1024]; unsigned int size; pipe(pfd); dup2(pfd[0], 1); pid=fork() if(pid) { execvp(...); } else if(pid>0) { size=xx; sleep(1); read(pfd[1], buf, size); ..... } else { return; } }
어쨌던 개념은 이렇습니다. 외부 프로그램을 호출할때, 외부 프로그램의 출력 결과를 파이프를 이용하여, 호출한 프로그램에서 받아 들이겠다는 것입니다.
>>>행복한 웃음<<<
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
1. printf를 출력하는 터미널의 tty 디바이스 파일을 알아본다.
1. printf를 출력하는 터미널의 tty 디바이스 파일을 알아본다.
2. 해당 tty를 수퍼유저로 연다.
3. 읽어서 소켓으로 전송한다.
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
만약 제가 그런 상황에 처했다면, 다음과 같은 방법을 상용 하겠습니다.
만약 제가 그런 상황에 처했다면, 다음과 같은 방법을 상용 하겠습니다.
먼저 네트웍으로 어떤 데이타를 전송해야 하는 프로그램에 외부 프로그램을 호출 할수
잇는 부분을 추가 합니다.
exec계열의 함수가 적당하것 같습니다. 이 부분에서 외부 프로그램을 호출 합니다.
그리고 호출 하기 이전에, 파이프와 fcntl()혹은 dup2()와 같은 것을 이용하여,
출력 파일 디스크립터를 바꾸어 주겠습니다.
즉 대충 생각 나는대로 프로그램소스를 만들어 보면 아래의 식이 되겠죠...
아 죄송 합니다.
시간이 없어서... 대충 프로그램코드를 작성 했습니다.
저렇게 작성하면 동작할 꺼라고 생각은 하는데, 기억이....
어쨌던 개념은 이렇습니다.
외부 프로그램을 호출할때, 외부 프로그램의 출력 결과를 파이프를 이용하여,
호출한 프로그램에서 받아 들이겠다는 것입니다.
>>>행복한 웃음<<<
댓글 달기