반응형

Linux 23

IPC - 03. pipe() 를 통한 프로세스 통신

/* * http://sosal.tistory.com/ * made by so_Sal */ 각각의 프로세스는 독립적인 메모리 영역을 가지고 있다. fork() 함수를 쓰더라도, 그 이전의 변수들이 복사되는 것일 뿐, 부모 프로세스와 자식 프로세스가 그 변수를 공유한다던가, 정보를 주고받는 행동은 방법이 없었다. 동시에 2개의 프로그램을 실행시키는데, 변수를 공유하려면 어떻게 해야할까? 공유메모리 기법을 쓰는 방법이 있고, pipe를 통해 변수를 공유한다기 보다 정보를 주고 받는 방법이 있다. 여기 포스팅되는 글은 단순히 buffer를 주고받을 수 있는 pipe에 대해서 설명하려 합니다. 부모프로세스에서 buffer 문자열을 자식프로세스에게 줄 수 있고, 자식 프로세스 역시 답장 가능입니다. ㅋ (아참, ..

Socket - server 소스. 다중 프로세스 채팅방

/* * http://sosal.tistory.com/ * made by so_Sal */ / * * 리눅스 기반입니다 * TCP/IP AF_INET 외부 네트워크 도메인 기반입니다. * fork() 함수를 이용한 다중 프로세스 원리 기반 채팅방입니다. * 문자열이 자신이 입력한것인지, client가 입력한 것인지 구분하는 ID는 넣지 않았습니다. * exit를 입력하거나 받으면 종료됩니다. * 최대로 보낼수있는. 받을수 있는 문자열의 길이는 MAXLINE 메크로를 통하여 정하였습니다. * 프로그램의 매개변수는 argv[1]로 port번호를 받습니다. * made by sosal. http://sosal.tistory.com/ * / #include #include #include #include #in..

Linux/Linux_Source 2009.11.07

BOF - 01.buffer over flow? 메모리 구조, 레지스터

/* * http://sosal.tistory.com/ * made by so_Sal */ :: 버퍼 오버플로우 :: 어떤 메모리 공간에 사용자가 데이타를 입력할 수 있는 기회가 생겼을 때, 시스템이 원하는 메모리 공간 이상의 코드를 대입하여 ret라는 녀석을 조절하여 시스템에게 사용자가 원하는 행동을 하도록 합니다. 이게 무슨뜻이냐면.. 천천히 내려갑시다. 아래는 시스템 메모리 구조를 나타낸다. 환경변수, 프로그램 인자값중 문자열 환경변수, Argv 포인터 인자값의 수 스택 영역. heap 영역. 초기화 되지 않은 변수 초기화 된 변수 읽을 수 있는 부분이 있으나, 변조될 경우 Segfault 발생 인텔 80x86 CPU 레지스터 - 범용 레지스터 - AX - Accumulator :: 산술연산 BX ..

Socket - 04. 다중 프로세스 네트워크 프로그래밍

/* * http://sosal.tistory.com/ * made by so_Sal */ 일반적으로 서버 프로그램은 불특정 다수의 클라이언트로부터 서비스 요청을 처리할 수 있는 다중 사용자 서버 (Multi-user server)로 개발됩니다. 다중 사용자 서버는 반복 처리 서버(Iterative Server)와 동시 처리 서버(Concurrent Server)로 개발될 수 있습니다. 반복 처리 서버는 개발하기 쉽고 이해하기 쉽지만, 사용자가 많아질 경우 클라이언트가 서비스를 위해 대기하는 시간이 길어질 수 있기 때문에 현실적으로 사용하기 어렵습니다. 동시 처리 서버는 다수의 클라이언트로부터 서비스 요청을 동시에 처리함으로써 서비스 제공을 보장합니다. 대표적인 모델은 다중프로세스와 다중 스레드 등이 존..

System - 02. system() 자식 프로세스

/* * http://sosal.tistory.com/ * made by so_Sal */ system() 함수에 대해 알아보겠습니다. #include int system(const char * string) system() 함수는 굉장한 편리함을 가져다 주는 함수입니다. 어떻게 보면 게으른 사람들의 전유물이기도 하지요.. shell? :: 사용자가 입력하는 명령어들을 기계어로 번역해주는 명령 해석기 쉘은 사용자가 운영체제와 대화할 수 있는 중간 역할자. 인터페이스가 됩니다. 쉘에서 사용자가 한 말을 받아 운영체제에 전해주고, 운영체제는 그 답을 쉘을 통해서 사용자에게 보여주게 되는것입니다. 쉘 역시 하나의 프로그램입니다. (bash, sh, csh 등 다양한 종류의 쉘이 있는데.. 리눅스 콘솔창에서 우..

System - 01. Process 개념

/* * http://sosal.tistory.com/ * made by so_Sal */ 프로세스 :: 컴퓨터 내에서 실행중인 프로그램을 일컫는 용어. 프로세스란건 아주 간단합니다. Ctrl + Alt + delete로 작업관리자를 켜봅시다. 프로세스 텝을 가보시면 프로세스들의 목록을 쭉~ 보실 수 있습니다. putty를 4개나 켜놨더니 프로세스에 4개가 올라와있네요. 항상 켜져있는 메신저 na**까지 보입니다. 프로세스, 쉽게 와닿나요? 리눅스는 위 그림의 윈도우와 같은 다중 태스킹 운영체제입니다. 한 시점에서 여러 개의 프로그램들이 실행되는데, 각 실행중인 프로그램은 하나의 프로세스가 되고, 물론 하나의 프로그램이 여러개의 프로세스가 될 수 있습니다. 따라서 여러 사용자들이 하나의 프로그램을 실행시..

Socket - 03. Client socket

/* * http://sosal.tistory.com/ * made by so_Sal */ #include int socket( int __domain, int __type, int __protocol); int connect(int socket, const struct sockaddr *address, size_t address_len); :: socket :: Socket - 01. Socket(), sockaddr 글을 참조하세요. :: connect :: Socket - 02. Socket - Server socket 글을 참조하세요. 기본적인 서버 - 클라이언트 소켓 구조에서 클라이언트측 소스는 무척이나 간단합니다. 정보를 주고 받을 수 있는 환경을 구축해야 하는 서버에 비하여 클라이언트는 전화..

리눅스 FILE - open(), close() 시스템콜

/* * made by so_sal * http://sosal.tistory.com/ */ open() 1. 함수의 정의 2. 매개변수 3. 권한 close() 1. 함수의 정의 #include //file control header #include #include int open( const char *path, int oflags ); int open( const char *path, int oflags, mode_t mode ); open 함수는 path 매개변수의 경로를 통해서 열고 파일 서술자를 리턴합니다. 파일 서술자를 이용해 파일컨트롤, read, write 등 시스템콜을 이용할 수 있습니다. open 은 파일 또는 장치로의 접근 경로를 만듭니다.. open 함수의 리턴값,, 파일 서술자는 ..

리눅스 FILE - read() 시스템콜

/* * made by so_sal * http://sosal.tistory.com/ */ 정수값 이름 0 표준 입력( stdin ) /dev/stdin 1 표준 출력( stdout ) /dev/stdout 2 표준 오류( stderr ) #include size_t read( int fildes, void *buf, size_t nbytes ); 첫번째 인자 :: fildes :: 파일 서술자 두번째 인자 :: *buf :: 읽어와서 저장할 버퍼. 새번째 인자 :: nbytes :: 읽을 수 있는 최대 byte의 수 read는 총 읽어와서 buf에 저장한 byte의 수를 리턴합니다. #include #include int main(){ char buffer[128]; int nread; nread = ..

리눅스 FILE - Write() 시스템콜

/* * made by so_sal * http://sosal.tistory.com/ */ 정수값 이름 0 표준 입력( stdin ) /dev/stdin 1 표준 출력( stdout ) /dev/stdout 2 표준 오류( stderr ) 모든 프로세스가 갖추어야 하는, 갖추고 있는 파일 서술자는 위 세 개가 있다고 01.번에서 언급한적이 있다. #include size_t write( int fildes, const void *buf, size_t nbytes ); 첫번째 인자 fildes :: 파일 서술자, 두번째 인자 buf :: 파일 서술자에 쓰려고 하는 데이타 세번째 인자 nbytes :: 쓰려는 바이트의 수 write함수는 실제로 써진 바이트의 수를 리턴한다. (만일 write함수 실패시 -1..

반응형