수안이의 컴퓨터 연구실

  • Mainpage
  • About Me
  • Tags
  • Metapage
  • Notice
  • Location
  • Keywords
  • Guestbook
  • Admin
  • Write an Article
  • Total | 1692079
  • Today | 223
  • Yesterday | 564

1 Articles, Search for 'pipe'

  1. 2007/05/14 PIPE 응용
Programming/UNIX/Linux C2007/05/14 11:10

PIPE 응용

이번기사는 pipe 를 이용한 부모프로세스와 자식프로세스간의 통신 방법에 대한 내용을 담고 있다. 이밖에도 fork와 exec 를 통한 프로세스 생성과 생성된 프로세스와의 통신, pipe 로 생성된 파일 지시자의 구성등에 대한 내용을 담고 있다.


1절. 소개
2절. 만들고자 하는것
2.1절. pipe(2) 함수에 대해서
2.2절. 작동 process
2.3절. 예제 코드

--------------------------------------------------------------------------------

1절. 소개
우리는 이미 PIPE 를 통한 IPC 의 구현에 대해서 몇번에 걸쳐 다루었었다. 그런데 필자가 실수로 보모자식간의 통신을 위한 pipe 의 사용에 대한 내용은 빼먹었었다.

이번에는 이 pipe 의 사용법에 대한 응용을 예를들어 설명할 생각이다.


--------------------------------------------------------------------------------

2절. 만들고자 하는것
우리는 몇개의 실행프로그램으로 이루어진 시스템을 설치하 일종의 자동실행 프로그램을 만들것이다. 이 시스템은 3개의 프로그램으로 이루어져 있다. 이 프로그램들은 일정한 순서대로 실행이 되어야 하며, 하나의 프로그램이 실행되기전에 바로앞의 프로그램이 제대로 실행되었는지 확인후 제대로 실행되었다면 실행되어야 한다.

이것을 구현하기 위해서 우리는 main 실행파일을 하나 만든후, main 실행파일에서 fork&exec 방식을 이용해서 순서대로 나머지 3개의 sub 프로그램들을 실행하게 될것이다.

sub 프로그램의 실행순서와 실행할 파일이름을 지정해주기 위한 설정파일을 가지게 되며, main 프로그램은 설정파일을 읽어들여서 sub 프로그램들을 실행시키게 될것이다.

그런데 이들 프로그램은 앞의 프로그램이 제대로 실행되었는지 확인후 차례대로 실행시켜주어야 할것이다. 그러기 위해서 main 프로그램은 하나의 sub 프로그램을 실행시킨후 실행시킨 sub 프로그램과 pipe 를 이용해서 통신을 하게 될것이다. sub 프로그램은 자신의 pid 를 main 프로그램에 넘겨주게 되고, main 은 이 pid 를 넘겨 받으면 sub 프로그램이 제대로 실행되었다고 판단하고 다음 sub 프로그램을 실행하게 된다.


--------------------------------------------------------------------------------

2.1절. pipe(2) 함수에 대해서
pipe 함수를 호출하게 되면, 읽기전용과 쓰기전용 두개의 파이프를 생성할수 있다.




아규먼트를 보면 int형 배열임을 알수 있다. 이는 pipe 호출로 만들어 지는 읽기전용과 쓰기전용의 파이프 연결자를 넘겨 받기 위함이다.

PIPE 의 전반적인 특성은 이 사이트의 다른 문서들을 참고하기 바란다.


--------------------------------------------------------------------------------

2.2절. 작동 process
이 프로그램은 아마 다음과 같은 방식으로 작동할것이다.
메인 프로그램 시작





exec 함수를 실행시킬경우 열린파일 지시자가 상속된다는 점을 알고 있을것이다. dup2 를 이용해서 기존에 만들어진 쓰기전용 파이프 번호를 표준출력(1) 으로 복사하고 나서 execl 함수를 이용해서 프로그램을 실행시키면, 이 프로그램은 표준출력을 통해서 부모의 파이프 와 통신할수 있게 된다.


--------------------------------------------------------------------------------

2.3절. 예제 코드
예제 코드는 2개의 쏘쓰로 이루어질 것이다. 하나는 main 프로그램으로 프로그램의 이름은 pm.cc 이고, 다른 하나는 pm 프로그램에서 frok&exec 로 실행시킬 sub 프로그램으로 이름은 proc.c 이다.

예제 : proc.c



프로그램이 하는일은 간단하다. 자신의 pid 번호를 write 를 이용해서 표준출력으로 보내는 것이다. 이 표준출력은 pm 에서 생성시킨 pipe 와 연결되어 있음으로 pid 번호는 pm 프로그램으로 전달될 것이다.

이 파일을 컴파일 한다음에 proc1, proc2, proc3 라는 이름으로 복사해서 적당한 디렉토리에 옮겨 놓도록 하자. 필자의 경우 /usr/yundream/bin 에 옮겨 놓았다.

예제 : main.c



pm.cc 는 main 프로그램이다. 설정파일 config.cfg 로 부터 실행시켜야될 파일이름을 읽어들어와서 vector 로 목록을 만든다음에 fork&exec 로 미리 만들어 놓은 proc1, proc2, proc3 를 실행 시키다. config.cfg 파일은 다음과 같이 구성될것이다.
/usr/yundream/bin/proc1
/usr/yundream/bin/proc2
/usr/yundream/bin/proc3




위의 프로그램을 실행시키면 아래와 같은 결과를 보여줄것이다.
[root@localhost test]# ./pm
exec 3642
exec 3643
exec 3644


실행을 했다면 실제로 sub 프로그램들의 표준출력이 어떻게 처리되고 있는지 알아보도록 하자. /proc/3642/fd 로 이동해서 ls 값을 보도록 하자.
[root@localhost fd]# ls -al
합계 0
dr-x------ 2 root root 0 7월 28 14:09 .
dr-xr-xr-x 3 root root 0 7월 28 14:08 ..
lrwx------ 1 root root 64 7월 28 14:09 0 -> /dev/pts/5
l-wx------ 1 root root 64 7월 28 14:09 1 -> pipe:[28721]
lrwx------ 1 root root 64 7월 28 14:09 2 -> /dev/pts/5


위의 결과를 보면 표준출력 1 이 /dev/pts/5 로 연결되어 있지 않고, pipe 로 연결되어 있음을 알수 있다. 또한 이 파이는 쓰기 전용임을 알수 있다.

이제 pm 의 파일지시자 구조를 알아보겠다. pm 의 pid 번호를 알아내고 /proc/pmpid/fd 로 이동해서 ls 값을 알아보도록 하자.
[root@localhost fd]# ls -al
합계 0
dr-x------ 2 root root 0 7월 28 14:11 .
dr-xr-xr-x 3 root root 0 7월 28 14:11 ..
lrwx------ 1 root root 64 7월 28 14:11 0 -> /dev/pts/5
lrwx------ 1 root root 64 7월 28 14:11 1 -> /dev/pts/5
lrwx------ 1 root root 64 7월 28 14:11 2 -> /dev/pts/5
lr-x------ 1 root root 64 7월 28 14:11 3 -> pipe:[28721]
l-wx------ 1 root root 64 7월 28 14:11 4 -> pipe:[28721]


2개의 파이프가 생성되었음을 알수 있다. 하나는 읽기전용 파이프이고, 또다른 하나는 쓰기전용 파이프이다. 그리고 파이프 번호를 보면 28721 로 각 sub 프로그램들의 파이프번호와 일치함을 알수 있다. 이를 통해서 각 sub 프로그램들의 표준출력 1 은 pm 의 읽기전용 파이프의 연결번호인 3 번과 연결되어 있음을 알수 있다.

출처 :http://joinc.co.kr/modules.php?name=new ··· 3Dnested
"UNIX/Linux C" 카테고리의 다른 글
  • utmp 를 이용한 사용자 로그인정보 관리 (0)2007/05/14
  • library 의 사용 (0)2007/05/14
  • PIPE 응용 (0)2007/05/14
  • 데이타와 포인터 (0)2007/05/14
  • fcntl 함수 사용하기 (0)2007/05/14
2007/05/14 11:10 2007/05/14 11:10
Posted by webdizen
Tags pipe
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/2941

Leave your greetings.

[로그인][오픈아이디란?]

«Prev  1  Next»

RSS HanRSS
Blog Image
webdizen
이곳은 컴퓨터에 대해 연구하고, 공유하고, 소통하기 위한 연구실입니다. 개인적으로는 OLAP, Data Mining, Semantic Web, Data Modeling에 대해서 연구하고 있습니다.

Categories

전체 (3009)
Webdizen (141)
Life (6)
Diary (16)
Blog (9)
IDEA (2)
Travel (10)
Book (16)
Photo (7)
Movie (8)
Music (14)
Leisure Sports (10)
Funny (6)
Hardware (121)
Software (120)
Windows (5)
Unix & Linux (120)
Installation (5)
Kernel (10)
System (34)
Develop (22)
X-Window (0)
Applicaton (31)
Security (4)
Framework (2)
Hadoop (2)
Programming (804)
Algorithm & Data Structure (1)
Assembly (38)
UNIX/Linux C (95)
C++ (128)
STL (4)
Java (38)
Win32 API (92)
ATL/COM (44)
MFC (151)
.NET (26)
WCF/WPF (4)
C# (28)
Network Programming (17)
Database Programming (12)
OpenGL / DirectX (13)
Multimedia Programming (0)
Game Programming (21)
Parallel Distributed Progra... (0)
Reverse Engineering (0)
Debugging (9)
Python (1)
Ruby (1)
Ruby on Rails (1)
QT (4)
GTK (0)
JSP (0)
PHP (6)
ASP.NET (6)
ASP (2)
Development (28)
Useful Library (2)
Data Modeling (0)
Database (105)
Oracle (4)
MSSQL (41)
MySQL (2)
Data Warehouse (2)
Data Mining (4)
Network (66)
Web (79)
DHTML (4)
XHTML (1)
Javascript (1)
CSS (1)
AJAX (9)
XML (11)
Flex (1)
Silverlight (3)
Security (91)
DoS (1)
Kernel (10)
Scanning (3)
Sniffing (0)
Spoofing (4)
Overflow (28)
Web (11)
Shell (10)
Format String (14)
Window (2)
Embedded (70)
Multimedia (27)
Mobile (14)
Graphic (24)
Management (633)
Knowledge (581)
Hadoop (0)

Notice

  • 메타 블로그 사이트에 등록
  • 새해 맞이 블로그의 변화
  • 블로그 명칭 변경
  • 도메인(www.webdizen.net) 구...
  • TEXTCUBE 1.6.1로 업그레이드...

Tags

  • 농업생명과학대학
  • Named
  • 플래시
  • FTP
  • 몰입
  • 노테르담
  • 데이터 웨어하우스
  • Mashup
  • 비트맵 파일
  • 능력
  • GPMC 2.0
  • 아이팟
  • 블루투스 해드셋
  • Cartesian 곱
  • DDL
  • 리눅스
  • IPTV
  • 오르세미술관
  • 4대륙
  • Foundstone

Recent Articles

  • 트위터(Twitter)의 시작!.
  • 청년 리더의 조건.
  • 애플의 타블렛 PC - 아이패드....
  • 미래의 인터페이스 - 육감 기....
  • 기초발성법 동영상 강좌.

Recent Comments

  • 학교 과제물중 쓰레드에 대하....
    장진혁 03/17
  • 관리자만 볼 수 있는 댓글입....
    비밀방문자 03/12
  • 상대방의 이야기를 열심히 경....
    DoNuts 03/03
  • Lots of students know techn....
    Bobbi35Shannon 02/25
  • 좋은글 잘 보고 갑니다..
    Und_hacker 01/08

Recent Trackbacks

  • printf,scanf를 이용한 형식....
    yundream의 프로그래밍 이야기 03/10
  • 파일 열기/저장하기 CFileDialog.
    은마군의 나태블록 2009
  • World IT Show 2008.
    상우 :: Oranzie's BLOG 2008
  • cvs서버 설치하기.
    3인3색 2008
  • 속속 공개되는 Google Chart....
    PHP와 Web 2.0 2007

Archive

  • 2010/02 (1)
  • 2010/01 (6)
  • 2009/12 (5)
  • 2009/09 (3)
  • 2009/08 (1)

Calendar

«   2010/03   »
일 월 화 수 목 금 토
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

Bookmarks

    • Administration
      • IIS.NET
      • NTFAQ
      • OS의 모든 것
      • 리눅스포털
    • Database
      • SQL Server Central
      • SQL Team
    • Development
      • .NET Heaven
      • ASP Alliance
      • ASP.NET 2.0
      • Bullog.net
      • C# Corner
      • C++ (C PlusPlus.com)
      • C++ Reference
      • CodeGuru
      • CodePlex
      • DebugLab
      • Dev Articles
      • Devpia
      • DotNet Junkies
      • DotNet Zone
      • Driver Online
      • GOSU.NET
      • HOONS 닷넷
      • Joinc 팀블로그
      • KOSR
      • MSDN Home Page
      • OSR Online
      • Sky.ph - 개발자 커뮤니...
      • TAEYO.NET
      • The Code Project
      • WindowsClient.net
      • 김상욱의 개발자 Side
      • 조인시 위키
    • Human Networks
      • belief21c's e-space
      • I think I can
      • Invisible Rover's Blog :D
      • Rodman®
      • ■ Feel So Good~! ■
      • 까만 나비
      • 나를 가꾸는 시간.
      • 나만의 즐거움~~!
      • 단녕
      • 상우 :: Oranzie's BLOG
    • Information Technology
      • Microsoft TechNet
      • 지디넷코리아 - 글로벌...
    • Security
      • FoundStone
      • milw0rm
      • NewOrder
      • OpenRCE
      • Phrack.org
      • Reverse Engineering b1...
      • Reverse Engineering Team
      • RootKit
      • SecurityFocus
      • SecurityXploded by Nag...
      • Wow Hacker
      • Zone-H
Textcube
Louice Studio Inc.
Powered by Textcube. Original designed by Tistory.