성엽이
KKIMSSI
성엽이
전체 방문자
오늘
어제
  • 분류 전체보기 (454)
    • :) (2)
    • C프로그래밍이론 (9)
    • C++프로그래밍 (64)
      • STL (1)
    • C# (2)
    • Visual studio 10.0 (9)
    • AT91SAM7S256 (21)
    • 논리회로 (14)
    • AVR2560 (11)
    • TCPIP (16)
    • NetWork (4)
      • Ubuntu Linux (2)
    • Assembly (21)
    • UNIX 프로그래밍 (6)
    • RFID 분석 (1)
    • Win32 API (7)
    • Cortex-M3 (4)
    • Unity (91)
    • Flutter (9)
    • OwnProject (11)
      • It's mine (5)
      • 마인드스톰 실습 (1)
      • 보고서 자료 (2)
      • RPi B+ (2)
    • ETC (25)
      • 상식 (3)
    • MFC (40)
    • PostgeSQL (18)
    • 영상제어 (6)
      • VFW_영상처리 (1)
    • Python (0)
    • Java (30)
      • SpringBoot (2)
      • Javascript (1)
      • JSP (13)
      • Spring (8)
    • Oracle (4)
      • SQL (3)
    • HTML (6)
      • Thymeleaf (1)
      • CSS (1)
      • Bootstrap (3)
    • IDE (1)
      • VS Code (1)
    • Android (2)
    • Privacy Policy (0)
    • MYSQL (2)
      • MariaDB (2)
    • AWS (5)
    • 개인공부 (0)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록
  • 관리자
  • 글쓰기

공지사항

인기 글

태그

  • ARM Reverse Engineering
  • MFC
  • Boot Code 분석
  • WINAPI
  • 문자열 나누기

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
성엽이

KKIMSSI

2013.07.08_Inter Process Communication(IPC)_활용.
TCPIP

2013.07.08_Inter Process Communication(IPC)_활용.

2013. 7. 9. 14:36

 

 Intercom_server

 /****** IPC(Inter Process Communication) 소켓 내부적으로 통신하는 방법 : FILE_SOCKET *****/

#include<stdio.h>
#include<pthread.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<sys/un.h>
#include<unistd.h>
#include<stdlib.h>

#define  FILE_SOCKET "../SMART.SOCKET"

int main()
{
  
int iRSock;
  
int  iCSock;
  
int  iStructSize;
  
struct sockaddr_un stSAddr;
  
struct sockaddr_un stCAddr;  

  
// 파일 지우기 명령.
  
// 파일들의 조각들을 끊어주는 명령, 그래서 지워짐.
  
// 기존의 파일이 있으면 초기화 해주는느낌.
  unlink(FILE_SOCKET);

  iRSock 
= socket(AF_UNIX, SOCK_STREAM, 0);
  stSAddr.sun_family 
= AF_UNIX;
  strcpy(stSAddr.sun_path, FILE_SOCKET);
  iStructSize 
= sizeof(struct sockaddr_un);
  bind(iRSock, (
struct sockaddr *)&stSAddr, iStructSize);
  
  listen(iRSock, 
5);

  
while(1)
  {  
// while 문안에 첫번째줄 변수선언.
    
unsigned char ucData[255];
    
unsigned int uiRet;
    printf(
"접속 대기중 ... \n");
    iCSock 
= accept(iRSock, (struct sockaddr*)&stCAddr, &iStructSize);
    uiRet  
= read(iCSock, ucData, sizeof(ucData));
    ucData[uiRet-
1]=0; // ENTER 제거.
    printf(
"접속 MSG : [%s]\n", ucData);
    close(iCSock);
    
if('$' == ucData[0])
    {
      
break;
    }
  }
  
  close(iRSock);

  
// 기존의 소켓을 지운다.
  unlink(FILE_SOCKET);
  
  
return 0;
}

 

 

 Intercom_Clnt

#include<stdio.h>
#include<pthread.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<sys/un.h>
#include<unistd.h>
#include<stdlib.h>

#define  FILE_SOCKET "../SMART.SOCKET"

int main()
{
  
int  iCSock;
  
int  iStructSize;
  
struct sockaddr_un stSAddr;
  
unsigned char ucData[255];
  
int iRet;

  iCSock 
= socket(AF_UNIX, SOCK_STREAM, 0);
  stSAddr.sun_family 
= AF_UNIX;
  strcpy(stSAddr.sun_path, FILE_SOCKET);
  iStructSize 
= sizeof(struct sockaddr_un);

  
while(1)
  {
    iRet 
= connect(iCSock, (struct sockaddr *)&stSAddr, iStructSize);

    
if(0 > iRet)
    {
      perror(
"connect : ");
      
return 0;
    }

    printf(
"접속 성공 : 메세지를 입력하세요.\n");
    iRet 
= read(0, ucData, sizeof(ucData));
    write(iCSock, ucData, iRet);
    printf(
"전송을 완료했습니다. 종료합니다.\n");
    close(iCSock);
    
if('$' == ucData[0])
    {
      
break;
    }
    iCSock 
= socket(AF_UNIX, SOCK_STREAM, 0);
  }
  
return 0;

} 

 

 

 

 Inter Process Communication(IPC)

 내부적인 통신을 하는 방법중에 FILE_SOCKET 을 이용하면 가능하다. #define FILE_SOCKET을 이용해서 상위폴더에 SMART.SOCKET 이라는 

 SOCKET 확장자( .SOCKET ) 를 만들어서 직접 내부적인 통신을 하는 방법이다.

 

 

 팁

 cp lan/20130708(존재하는폴더경로)/(파일이름) ../ -> home 디렉토리에 실행파일을 복사한다.

 cp (파일이름) ~/ -> home 디렉토리 파일 옮기기.

 

 

 makefile

TRG = make

SRC = $(TRG).c
CFLAG 
= -lpthread
CC 
= gcc

all : $(SRC)
     @$(CC) -o $(TRG) $(SRC) $(CFLAG)
     @ls -l $(TRG)

clean :
     @rm -rf $(TRG)

rebuild : clean all

 

: make  

: make clean 

: make TRG=컴파일할파일이름 (타겟을 다시 지정)



: 만들어진곳. home 디렉토리.


실행후 ㅎㅎ





#define __SOCKADDR_COMMON(sa_prefix) sa_family_t sa_prefix##family


struct sockaddr_un

{

__SOCKADDR_COMMON (sun_);

char sun_path[108];     /* Path name.  */

};


sa_prefix <= sun


sa_family_t sa_prefix##family <= sa_prefix## 이게 sun_ 로 바뀌면서 ## 때문에 family 가 붙게된다.


sa_family_t sun_family


typedef unsigned short int sa_family_t;



// 구조체 크기가 110byte 겠다.

struct sockaddr_un

{

sa_family_t sun_family;

char sun_path[108];     /* Path name.  */

};


저작자표시

'TCPIP' 카테고리의 다른 글

2013.07.10_Thread를 이용한 Server 구현.  (0) 2013.07.10
2013.07.09_TCP/IP를 Thread로 통신_  (0) 2013.07.09
2013.07.04_멀티태스킹 테스트  (0) 2013.07.05
2013.07.03_UDP_기타이론설명By종영이형  (0) 2013.07.04
2013.07.02_sigaction() 함수.  (0) 2013.07.02
    'TCPIP' 카테고리의 다른 글
    • 2013.07.10_Thread를 이용한 Server 구현.
    • 2013.07.09_TCP/IP를 Thread로 통신_
    • 2013.07.04_멀티태스킹 테스트
    • 2013.07.03_UDP_기타이론설명By종영이형
    성엽이
    성엽이

    티스토리툴바