popen 사용시 파이프의 내용을 바로바로 보내고 싶습니다.

Shinkyo의 이미지

총 3가지 프로세스를 두었습니다. control과 mplayer 그리고 그들을 실행하는 메인프로세스를 두었는데요

메인 프로세스에서 두 control과 mplayer를 실행하고 그들 사이에 캐릭터 데이터를 전송하고자 합니다.

control에서 명령이 감지되었을때 바로 mplayer로 전송을 하려는데 그게 안되네요..

control프로세스가 종료될때만 전송이 되는듯 합니다. 고수님들 도와주세요 ㅠㅠ

다음과 같이 소스를 짯습니다.

char readbuf;
FILE *in, *out;

in = popen("/mnt/control", "r")

out = popen("/mnt/mplayer", "w")

while(fgetc(readbuf, 1, in)
fputs(readbuf, out);

control과 mplayer를 동시에 수행하면서 control에서 출력이 있을때마다 바로바로 mplayer로 전송하고 싶은데요 지금 문제가 되는건 in에서 불러들인 control프로세스가 종료가될때 mplayer로 아웃풋이 전송됩니다. 어떻게 해결해야 할까요???

ssehoony의 이미지

fputs 를 잘 사용안해서 확실한건 아니지만
혹시 printf 랑 비슷하게 내부적으로 버퍼링을 하고 있어서 그런게 아닌가 쉽네요
fputs 다음에 fflush 를 이용해서 강제로 기록하도록 해보세요.

Shinkyo의 이미지

메인프로세스에서 fflush를 해주었었는데..
서브에도 해주니 되더라구요 답변 감사합니다.

sunyzero의 이미지

버퍼링이 필요 없다면, 매번 fflush()를 해주는 것보다 setvbuf() 를 호출하여 버퍼링을 끄면됩니다.

setvbuf(out, NULL, _IONBF); 로 호출하시면 됩니다.
========================================
* 부분이 전체를 대변하는 하나의 속성일때 진리이다.
영속적이지 못한 것은 전체가 될 수 없다.

========================================
* The truth will set you free.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.