tgool
Tgool
tgool
전체 방문자
오늘
어제
  • 분류 전체보기
    • Data Science
      • AI
      • Data Mining
      • ML(Machine Learning)
    • Computer Science
      • 자료구조
      • 알고리즘
      • 시스템 프로그래밍
      • 운영체제
      • 컴퓨터 구조
      • 컴퓨터 네트워크
      • 데이터 베이스
      • 파이썬
      • 자바
      • 아두이노
    • Math
      • 통계학
      • 확률론
      • 선형대수학
      • 수리통계학
      • 회귀분석
    • TOFEL
    • Git
    • Plan
    • Book
    • Working out
      • 영양과 생활
      • 운동 정보
      • 운동 기록

인기 글

최근 글

최근 댓글

hELLO · Designed By 정상우.
tgool
Computer Science/시스템 프로그래밍

Named Pipe 사용 예시

Computer Science/시스템 프로그래밍

Named Pipe 사용 예시

2022. 12. 22. 13:21
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>


#define FIFO_FILENAME		"./testfifo"

static void print_usage(char *progname)
{
	printf("%s (w|r)\n", progname);
	return;
}

static int do_reader(void)
{
	int fd;
	char buf[128];

	printf("call open()\n");
	fd = open(FIFO_FILENAME, O_RDONLY); //해당 프로세스는 read 역할
	if (fd < 0) {
		perror("open()");
		return -1;
	}
	read(fd, buf, sizeof(buf)); //pipe에서 데이터를 읽어와 buf에 저장
	printf("writer said...%s\n", buf); //buf에 저장된 문자열 출력
	close(fd);

	return 0;
}

static int do_writer(void)
{
	int fd;
	char buf[128];

	printf("make fifo\n");
	unlink(FIFO_FILENAME); //기존에 FIFO_FILENAME이 있다면 그 파일을 지우기
	if (mkfifo(FIFO_FILENAME, 0644)) { //named pipe 생성
		perror("mkfifo()"); //예외 처리
		return -1;
	}

	printf("call open()\n");
	fd = open(FIFO_FILENAME, O_WRONLY); //open을 통해 해당 프로세스가 writer 담당이 됨
	if (fd < 0) { //오픈 예외 처리
		perror("open()");
		return -1;
	}
	strncpy(buf, "hello", sizeof(buf)); //buf에 문자열 저장
	write(fd, buf, strlen(buf)); //write로 buf에 저장된 문자열 가져오기
	close(fd);

	return 0;
}

/* fifo (s|r) */
int main(int argc, char **argv)
{
	if (argc < 2) { //메인 함수 파라미터 예외 처리 argc는 파라미터 개수,argv[0]은 프로그램 이름 개수 1개 픽스
		print_usage(argv[0]);
		return -1;
	}

	if (!strcmp(argv[1], "r")) { //입력된 파라미터 값이 r이면 read 실행
		/* reader */
		do_reader();
	} else if (!strcmp(argv[1], "w")) { //입력된 파라미터 값이 w이면 read 실행
		/* writer */
		do_writer();
	} else {
		print_usage(argv[0]);
		return -1;
	}

	return 0;
}

//터미널 두 개로 하나는 write 실행 하나는read 실행해볼 것!! 
//write만 실행했을 때 open에서 blocking 된 상태로 있다가 read 실행되면 blocking 해제

'Computer Science > 시스템 프로그래밍' 카테고리의 다른 글

Pipe 사용 예시  (0) 2022.12.22
Pipe와 Named Pipe  (0) 2022.12.22
IPC란?  (0) 2022.12.22
    'Computer Science/시스템 프로그래밍' 카테고리의 다른 글
    • Pipe 사용 예시
    • Pipe와 Named Pipe
    • IPC란?
    tgool
    tgool

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.