반응형

Sosal~ 798

cp. 파일 복사 프로그램 copy

/* * http://sosal.tistory.com/ * made by so_Sal */ cp.c 파일 복사 프로그램 소스입니다. 가장 기본적인 소스입니다. #include #include #include #include #include #include int main(int argc,char* argv[]){ if(argc!=3){ printf("%s [file name] [copy file name]\n",argv[0]); exit(0); } char *cmd1; char *cmd2; cmd1 = argv[1]; //file name cmd2 = argv[2]; //copy file name char block[BUFSIZ]; int in, out; int nread; in = open(cmd1,O..

Linux/Linux_Source 2009.11.01

Linux 간단한 ls 디렉토리 출력 프로그램 구현

/* * http://sosal.tistory.com/ * made by so_Sal */ LINK 2){ perror("Usage :: _ls [Directory] \n"); exit(EXIT_FAILURE); } char* position; position = argv[1]; // 메인함수는 디렉토리 목록을 출력할 위치를 _ls(position,0); // 인자로 받아 _ls 함수의 매개변수로 전달하는 일만 수행합니다. exit(0); } void _ls(char* pos,int depth){ //depth는 처음 0이고, 디렉토리 출력중 새로운 디렉토리를 만나면 //depth를 증가시켜 재귀적으로 함수를 다시 호출합니다. DIR *dp; // 실제 파일을 가리키는 포인터 struct dirent *..

Linux/Linux_Source 2009.11.01

C++. template 템플릿. 자유로운 자료형 만들기

/* * http://sosal.tistory.com/ * made by so_Sal */ 시작하자마자 소스를 펼쳤어요. 간단한 소스를 4개 볼것입니다. 이 소스들만 분석하면 템플릿이 어떤건지 정확하게 이해가 될거같네요!! ㅎㅎ 여튼 탬플릿을 사용하는 목적은 자유로운 변수를 만들기 위함입니다. 어떠한 자료형이 들어오던 간에 전부다 알아서 처리해줍니다. /* * template == template 둘은 같은 의미입니다. * class :: C++ 스타일, typename a :: C 스타일 */ #include using namespace std; template //print라는 함수인데 위에 이상한게 있네요. void print(a data){ //함수 인자는 위에 템플릿 옆 class a. a라는 ..

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

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

IPC - 02. 신호 처리, sigaction 안정적 신호 인터페이스

/* * http://sosal.tistory.com/ * made by so_Sal */ 01.에서 봤던 kill 명령어를 더 자세히 보겠습니다. #include #include int kill(pid_t pid, int sig); 인자만 봐도 쉽게 알 수 있듯, kill 명령어에는 해당되는 프로세스 id와 명시적 sig를 전달합니다. #include int pause(void); 신호가 발생할 때까지 프로그램의 실행을 정지합니다. 신호를 받으면 호출되는 신호 처리부의 행동을 재개합니다. * 안정적 신호 인터페이스 sigaction #include int sigaction(int sig, const struct sigaction *act, struct sigaction *oact); **** struc..

IPC - 01. 프로세스 신호 signal 주고받기

/* * http://sosal.tistory.com/ * made by so_Sal */ 프로세스 통신방법엔 대표적인 방법 3가지. siganl (신호), pipe (파이프), socket (소켓) 이 있다. signal은 돌맹이 pipe는 편지 socket는 소포에 비유할 수 있다. signal이 돌맹이에 비유한다는 것은, 짱똘을 던지면 내가 너에게 화가났다. 조약돌을 던지면 내가 너를 사랑한다. 등등.. 행동에 대해 미리 약속을 해놓은 후 그 행동을 통하여 서로 대화를 나누는 방법이랄까? 가수들이 무대에서 무슨 손가락 모양을 하면서 비밀스런 애인에게 사랑을 전달하는 방법도 이에 포함되겠다 ^-^;; pipe나 socket에 대한 비유는..음.. 이글은 SIGNAL 관련 글이므로 생략하겠습니다 ㅋㅋ ..

System - 05. wait() 프로세스 동기화

/* * http://sosal.tistory.com/ * made by so_Sal */ fork 함수로 생성된 자식 프로세스는 독립적으로 실행됩니다. 따라서 부모프로세스는 자식프로세스가 하는 일을 알 수 없고, 변수의 공유나 자식프로세스가 계속 살아있는지 등에 대한 정보를 기본적으로는 알 수 없습니다. #include #include pid_t wait(int *stat_loc); //call by reference stat_loc은 종료된 프로세스의 pid 값을 리턴하여 보통 pid_t 변수에다 저장합니다. ex) int stat_loc; pid_t child_pid; child_pid = wait(&stat_loc); wait 시스템콜은 자식프로세스중 하나가 종료될 때까지 부모 프로세스를 기다리게..

System - 04. fork 복제 프로세스 생성

/* * http://sosal.tistory.com/ * made by so_Sal */ #include #include pid_t fork(void); fork함수를 사용하면 multi - tasking system을 볼 수 있습니다. 부모프로세스가 fork함수를 호출하면 자식프로세스를 생성합니다. 파일 이름이 fork이고, fork 함수를 실행시키는 파일을 실행해보고, pstree를 통해서 현재 자신의 쉘에 띄워진 프로세스들을 봅시다. fork 라는 파일의 프로세스 아래에 자신과 똑같은 이름의 프로세스가 하나 더 생겼네요. 여기서 마지막 fork 프로세스를 실행시킨 첫번째 fork 프로세스를 부모프로세스, 새로 생긴 마지막 fork라는 프로세스는 자식 프로세스라고 합니다. fork함수로 실행된 각각..

반응형