[완료] 프로세스간 통신

ydwhoru의 이미지

프로세스간 통신 문제.

보통 fork()를 이용해서 해결 하라는 답을 많이 보았는데요

fork()를 이용해서 다른 프로그램을 실행 시켰다고 가정 합니다.

프로세스1 이 다른 프로그램을 실행 시켰습니다.

프로세스2 는 다른 프로그램에서 출력하는 결과를 가져 와야 합니다.

물론 프로세스2에서 프로세스1 에게 입력도 할 것입니다.

검색으로는 popen, pipe, dup 등등....

이용 하면 된다고 하나.... 저는 도저히 모르겠습니다... 예제를 보여주셔 되고...

특정 함수가 있으면 특정 함수와 대략의 사용 법을 알려 주시면 매우 매우 매우 매우 감사하겠습니다 ㅠㅠ

정리 > 부모 프로세스 -> 자식 프로세스 생성
자식 프로세스 = 실행파일로 만들어진 프로그램 실행.
부모 프로세스 = 자식 프로세서가 필요한 입력, 출력을 담당.
( 자식이 출력 내보낼 땐, 부모가 자식의 출력으로 반응, 자식이 입력 받길 원할 땐, 부모가 자식의 입력을 대신 입력함 )

vivisection의 이미지

.

vivisection의 이미지

#include >sys/types.h>
#include >unistd.h> // 쉬프트 , 가 안먹네요..

pid_t fork(void)

/*
정상종료하면 자식프로세스에게 0을 돌려주고, 부모프로세스에게 자식프로세스 id
를 반환한다. 에러가 발생한 경우 자식프로세스를 만드맂 않고, 부모프로세스에게
-1을 반환한다. 동시에 외부변수 errno에 에러를 나타내는 값을 설정한다
*/

mithrandir의 이미지

bbcode를 사용하시면 됩니다
[ code]

코드
.
.
.
[ /code] 입니다. 빈칸빼고요.

언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net

언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net

vivisection의 이미지

윈도우라면 sendmessage()로 간단하게 처리할수 있는데
....약간 더 복잡하겠는데요
fork로 프로세스 만든후에 pid를 알아내고
signal()로 통신해야 겠는데요..

ydwhoru의 이미지

STDIO, STDOUT
을 보내고 받는 상태에서도

각 각의 시그널이 다르나요?

시그널이 다르다고 가정 했을 때,

부모가 자식에게 어떻게 정보를 보내죠?

자식의 STDIN으로 또는 자식의 STDOUT을 어떻게 부모가 받나요?...ㅠ

vivisection의 이미지

#include >signal.h>

void (*signal(int signum, void (*handler)(int)))(int)

/*
int sinnum; 시그널 번호
void (*handler)(int); 시그널을 잡았을때 실행하는 함수

정상종료하면 signum에 대한 이전의 handler 값을 반환하고,
에러가 발생한 경우에는 SIG_ERRㅇ을 반환한다.
외부변수 errno에 에러를 나타내는 값을 설정한다
*/

vivisection의 이미지

아.. 찾아보니 방법은 많군요..
pipe도 있고 socket도 있고..

근데 이걸 제대로 설명드릴려면 책 한 20페이지 분량이라서
곤란하겠네요..
도움이 못되서 죄송

ydwhoru의 이미지

대강의 파이프와 소켓은 알고 있습니다.

하지만 자식 프로세스가 실행 시키는 프로그램을 손대지 않고 STDIN STDOUT을 부모가 가져 올 수 있나요?

파이프나 소켓으로..?

저는 그것이 문제입니다 ㅠㅠ

bushi의 이미지

ydwhoru의 이미지

큰 도움 될 것같습니다.

제가 원하던 부분이 들어 있네요 감사합니다 꾸벅! ^^

ymir의 이미지

그냥 popen() 하나면 해결되는 상황으로 보이는군요.

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

댓글 달기

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 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • 사용할 수 있는 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>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • You can use Textile markup to format text.
  • 사용할 수 있는 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>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 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>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.