반응형

Linux/Linux_programing 25

Shell - Redirect 구현하기

아는 후배, Linux 과제 도와주다가.. redirect 관련 썼던 게시물이 없어서 한번 정리해서 올려본다. 1. Output redirection Output redirection은, 프로그램 결과를 특정 file descriptor에 write 하는것이다. 예를 들면, $ ls -al > tmp.txt 위와 같은 linux shell command는, ls -al의 결과를 tmp.txt라는 파일을 생성하여 write한다. (덮어쓰기) $ ls -al >> tmp.txt 위 command는 tmp.txt에 overwite 하지 않고, append (이어쓰기) 하는것이다. 위 command를 예제로 Output redirection 구현을 설명하자면, 1. 자식프로세스를 생성 2. 자식프로세스 안에서 ..

System V 공유메모리 시스템 콜

/* * http://sosal.tistory.com/ * made by so_Sal */ System V IPC 시스템콜은 프로세스간의 통신을 말한다. 우선 여기서 다룰 shm* 계열 함수들은 Shared memory 를 이용한 communication models 계열로 정의된다. (pipe , socket 등은 Message passing model 이다.) 그림 : (a) : Message passing. 그림 : (b) : Shared memory. (a)는 커널이 Responsible하게 관리하므로 좀더 안전하다고 볼 수 있다. (b)는 커널은 전혀 관여하지 않고 오로지 프로그래머에게 전적으로 책임이 있게 되는데 보안에 취약하며 굉장히 strict 하게 구현되는것을 요구한다. shmget : ..

Linux : dup과 dup2

/* * http://sosal.tistory.com/ * made by so_Sal */ 이 포스팅은 open, read, write 등의 시스템콜을 기본적으로 안다는 가정 하에 작성된 글입니다. 위 시스템콜에 대해서 모르신다면 :: LINK_ 1. dup 2. dup2 1.dup - 파일 식별자를 복제한다. #include // man page 참조 int dup( int fd ); (dup은 duplication의 약자겠죠?.. 아마.. ㅋㅋ) 새로운 파일 서술자를 반환하지만, 숫자만 다를 뿐 원래의 서술자, 복제된 서술자 모두 완벽히 같은 파일을 가리킨다. 실패 : -1 반환 (파라미터로 전달된 값이 fd가 아닐경우, 더이상 fd를 할당하지 못할경우) /* * fd1 파일 디스크립터에 open을 ..

Linux :: 디렉토리, 파일 정보 가져오기

/* * http://sosal.tistory.com/ * made by so_Sal */ 살펴볼것 1. stat(), fstat(), lstat() ,struct stat // 파일의 소유자나 그룹의 번호 를 가져오는 함수, 구조체 2. getcwd() // 현재 디렉토리의 경로를 알아내기 위한 함수 getpwuid(), struct passwd // passwd 파일의 한 항목을 가져오는 함수 및 구조체 getgrgid() , struct group // group 파일의 한 항목을 가져오는 함수 및 구조체 getlogin() // 로그인 이름 반환 함수 3. 245 opendir(), closedir() // 디렉토리를 열고 닫는 함수 readdir() struct dirent // 디렉토리 정보를..

Linux - real id, effective id 사용자 id

/* * http://sosal.tistory.com/ * made by so_Sal */ setuid() seteuid() setreuid() getuid() geteuid() getgid() getegid() 주구장창 real id, effective id에 대해서 설명한 후에 위 함수들을 간단하게 정리하고 끝내려 합니다. 함수들이 어떤것인지 간단하게만 보고자 한다면 이 글의 맨 아래로 내려가 주세요. 사용자 id는 크게 2가지로 나뉜다. real id, effective id. 정확하게 무엇인진 모르겠지만.. real id는 실제 id를 말하고 effective id는 현재 권한을 뜻한다고 일단 생각하자. 시스템 해킹 문제에 자주 쓰이는 setuid() 라는 함수의 man page를 확인해보자. #..

Linux - dirent.h 함수와 구조체, find 프로그램 맛보기

/* * http://sosal.tistory.com/ * made by so_Sal */ 이번 포스팅에서 다루는 내용 :: DIR *opendir(const char *dirname); :: int readdir(unsigned int fd, struct dirent *dirp, unsigned int count); :: int getdents(unsigned int fd, struct dirent *dirp, unsigned int count); :: struct dirent :: int closedir(DIR *dir); #include #include DIR *opendir(const char *dirname); opendir() 함수는 매개변수 dirname에 해당하는 디렉토리 스트림을 열고, ..

Linux - fcntl File control

/* * http://sosal.tistory.com/ * made by so_Sal */ fcntl - File control #include #include int fcntl(int fd, int cmd); int fcntl(int fd, int cmd, long arg); int fcntl(int fd, int cmd, struct flock *lock); (flock 구조체에 대해서는 게시하지 않았습니다. ) 첫번째 매개변수 fd부터 보겠습니다. fd - 파일 서술자(file descriptor) ㄴ 제어하기를 원하는 파일의 서술자를 지정하는 매개변수입니다. 리눅스 시스템에서 모든 프로세스는 0, 1, 2 라는 3개의 파일 서술자는 미리 정해져있습니다. 각각 입력(0), 출력(1), 에러(2)를 ..

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

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

Socket 05. option 소켓 옵션 getsockopt() setsockopt()

/* * http://sosal.tistory.com/ * made by so_Sal */ 소켓에는 다양한 옵션을 부여할 수 있다. 소켓 옵션은 getsockopt() 함수를 통하여 확인할 수 있고, setsockopt() 함수를 통하여 옵션을 부여할 수 있다. #include #include int getsockopt (int socket, int level, int optname, void *optval, socklen_t * optlen); int setsockopt (int socket, int level, int optname, const void *optval, socklen_t optlen); 첫번째 인자 :: int socket :: socket 설명자. 두번째 인자 :: int level..

Socket 04. close() shutdown() 소켓 서술자 닫기

/* * http://sosal.tistory.com/ * made by so_Sal */ #include int close(int file_descriptor); file descriptor로 지정된 파일 서술자와, 그 파일 서술자가 가리키는 실제 파일과의 연결을 차단. write()함수로 파일 쓰기를 수행할 때에는 자료가 실제로 기억되었는지 확인하지 못할 수 있다. 그래서 이런경우에 close의 반환값을 점검한다. 성공시 0, 실패시 -1 반환. #include int shutdown() :: 부분닫기 소켓 함수로 생성된 파일 서술자에는 (소켓 버퍼라고도 한다.) 송신 버퍼와 수신 버퍼 두가지가 열려있는데, shutdown()함수로 각각의 부분적 연결을 차단 가능. flags :: SHUT_RD 수신..

반응형