readline
prompt를 출력하고 사용자로부터 한줄의 문자를 입력받고 리턴한다. readline()
리턴값은 malloc()
에 의해 할당되어 있다. 반드시 free()
해야함.
#include <readline/readline.h>
char *readline (char *prompt)
EOF
를 만날시 (char *)NULL
리턴rl_on_new_line
Tell the update functions that we have moved onto a new (empty) line, usually after outputting a newline.
#include <readline/readline.h>
int rl_on_new_line (void)
rl_replace_line
Replace the contents of rl_line_buffer with text. The point and mark are preserved, if possible. If clear_undo is non-zero, the undo list associated with the current line is cleared.
#include <readline/readline.h>
void rl_replace_line (const char *text, int clear_undo)
rl_redisplay
If non-zero, Readline will call indirectly through this pointer to update the display with the current contents of the editing buffer. By default, it is set to rl_redisplay, the default Readline redisplay function (see section 2.4.6 Redisplay).
#include <realine/readline.h>
void rl_redisplay(void)
add_history
Place string at the end of the history list. The associated data field (if any) is set to NULL. If the maximum number of history entries has been set using stifle_history(), and the new number of history entries would exceed that maximum, the oldest history entry is removed.
string을 history list의 맨끝에 위치시킨다. 관련된 데이터 필드는 NULL로 셋팅된다. history 항목이 최대 개수를 넘을 경우, 오래된 항목들은 삭제된다.
#include <readline/history.h>
add_history(const char *string)
wait3
자식 프로세스가 종료되는 것을 기다리며, 종료된 프로세스의 상태와 자원 사용량을 알려주는 함수.
#include <sys/wait.h>
pid_t wait3(int *statloc, int options, struct rusage *rusage)
wait4
pid_t wait4(pid_t pid, int *statloc, int options, struct rusage *rusage)
stactloc에 사용가능한 매크로
macro | 내용 |
---|---|
WIFEXITED(status) | 자식 프로세스가 정상적으로 종료된 경우 true |
WEXITESTATUS(status) | exit()의 인자에서 하위 8비트 값을 리턴 |
WIFSIGNALED(status) | 자식 프로세스가 시그널을 받아 비정상적으로 종료된 경우 true |
WIFTERMSIG(status) | 시그널 번호를 리턴 |
WIFCOREDUMP(status) | 코어 파일이 생성된 경우 true |
WIFSTOPPED(status) | 현재 중지 상태이면 true |
WSTOPSIG(status) | 실행을 중단시킨 시그널 번호를 리턴 |
WIFCONTINUED(status) | 작업 제어 중지 이후 실행이 재개되었으면 true |
options
option | 내용 |
---|---|
WCONTINUED | 중지되었다가 실행을 재개한 이후 상태가 아직 보고되지 않은 자식도 리턴 |
WNOHANG | 종료 상태를 즉시 회수 할 수 없는 상황이라고 하여도 waitpid() 호출이 차단되지 않고 0 리턴 |
WUNTRACED | 중지되었으나 그 상태가 아직 보고되지 않은 자식도 리턴 |
signal
시그널 처리를 설정한다.
#include <signal.h>
void (*signal(int sig, void (*func)(int)))(int)
시그널을 처리하는 방법
유형 | 의미 |
---|---|
SIG_DFL | 기존 방법을 따른다. |
SIG_IGN | 시그널을 무시한다. |
함수 이름 | 시그널이 발생하면 지정된 함수 호출 |
kill
쉘에서 프로세스를 죽이는 kill명령과는 다르게 프로세스에 시그널을 전송한다.
프로세스에 SIGKILL을 보내면 쉘 명령의 kill과 같은 역할을 한다.
#include <signal.h>
int kill(pid_t pid, int sig)
pid | 의미 |
---|---|
양수 | 지정한 process id에만 시그널 전송 |
0 | 함수를 호출하는 프로세스와 같은 그룹에 있는 모든 프로세스에 시그널 전송 |
-1 | 함수를 호출하는 프로세스가 전송할 수 있는 권한을 가진 모든 프로세스에 시그널 전송 |
음수 | 첫번째 pid의 절대값 프로세스 그룹에 속하는 모든 프로세스에 시그널 전송 |
getcwd
현재 작업중인 디렉토리의 절대 경로를 buf에 복사하고 buf의 포인터를 리턴한다.
buf가 NULL이면 공백이 할당되고, size는 무시된다.
버퍼가 작으면 에러가 발생할 수 있으므로 크게 잡는다.
#include <unistd.h>
char *getcwd(char *buf, size_t size)
chdir
현재 작업 디렉토리를 변경한다. (change directory)
디렉토리의 실행 권한이 있어야한다. path의 시작이 '\'이면 안된다.
#include <unistd.h>
int chdir(const char *path)
stat
파일의 크기, 권한, 생성일시, 최종 변경일등 파일의 상태나 정보를 얻는 함수. symbolic link인 파일을 path 로 넘기면 그 원본 파일의 정보를 얻는다. lstat
함수는 symbolic link 파일 자신의 정보를 얻는다.
#include <sys/stat.h>
int stat(const char *path, struct stat *buf)
lstat
stat함수와 동작하는 기능이 같다.
symbolic link인 파일을 path로 넘기면 symbolic link인 파일 자체의 정보를 얻는다.
int lstat(const char *path, struct stat * buf)
fstat
열려진 파일의 크기, 파일의 권한, 파일의 생성일시, 최종 변경일 등 파일의 상태나 파일의 정보를 얻는 함수.
int fstat(int fd, struct stat *buf)
open
파일을 사용하기 위해 열기(open)한다. fopen()
은 C 라이브러리에서 제공하는 함수이고 open()
은 리눅스에서 제공하는 함수이다.
#include <fcntl.h>
int open (const char *FILENAME, int FLAGS[, mode_t MODE])
열기 옵션 | 설명 |
---|---|
O_RDONLY | 읽기 전용으로 열기 |
O_WRONLY | 쓰기 전용으로 열기 |
O_RDWR | 읽기와 쓰기 모두 가능 |
O_CREAT | 해당 파일이 없으면 생성 |
O_EXCL | O_CREAT를 했을 때, 파일이 이미 있어도 열기가 가능하며 쓰기를 하면 이전 내용 사라짐 |
O_CREAT와 O_EXCL를 함께 사용하면, 이미 파일이 있을 때에는 open()이 되지 않아 이전 파일을 보존할 수 있음 | |
O_TRUNC | 기존의 파일 내용을 모두 삭제 |
O_APPEND | 파일을 추가하여 쓰기가 되도록 open 후에 쓰기 포인터가 파일의 끝에 위치하게 됨 |
unlink
링크를 삭제한다.
#include <unistd.h>
int unlink(const char *path)
close
open()
함수로 열기를 한 파일을 닫는다.
#include <unistd.h>
int close(int fd)
read
open()
함수로 열기를 한 파일의 내용을 읽는다.
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t n)
write
open()
함수로 열기를 한 파일에 쓰기를 한다.
#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t n)
malloc
메모리를 동적으로 할당받는다.
#include <stdlib.h>
void *malloc(size_t size)
void *
메모리가 할당된 포인터, 실패 시 NULL 반환waitpid
wait()
함수처럼 자식 프로세스가가 종료될 때까지 대기한다. 차이점은 wait()
함수가 자식 프로세스 중 어느 하나라도 종료되면 대기에서 풀리지만 waitpid()
는 특정 자식 프로세스가 종료될 때까지 대기한다.
#include <sys/wait.h>
pid_t waitpid(pid_t pid, int *status, int options)
wait
자식 프로세스 작업이 끝날 때까지 대기한다.
#include <sys/wait.h>
pid_t wait(int *status)
free
malloc()
이나 calloc()
에서 할당받은 메모리를 시스템에 반환한다.
#include <stdlib.h>
void free(void *ptr)
pipe
파이프를 생성하여 fildes에 파이프에 대한 fd값을 할당한다.
#include <unistd.h>
int pipe(int fildes[2])
dup2
를 이용해서 stdout이 write end를 향하게 하고 stdin이 read end를 향하게 하는 방식으로 파이프 구현 가능하다.dup
파일 디스크립터 복사본을 만든다. 원본 디스크립터와 복사된 디스크립터의 읽기/쓰기 포인터는 공유된다.
#include <unistd.h>
int dup(int fildes)
dup2
fd의 파일 서술자를 복사하여 fd2에도 부여한다. (fd가 가리키는 파일을 fd2도 가리키도록)
#include <unistd.h>
int dup2(int fildes, int fildes2)
참고 : 파일 디스크립터 복사본을 만드는 함수로는
dup()
와dup2()
가 있다.dup()
는 사용하지 않는 디스크립터 번호 하나가 자동으로 지정되지만dup2()
는 원하는 번호를 지정할 수 있다. 지정한 번호가 이미 사용중이면 자동으로 그 파일을 닫고 다시 지정해준다.
execve
execve함수를 호출한 프로세스를 새 프로세스로 바꿔준다.
#include <unistd.h>
int execve(const char *path, char *const argv[], char *const envp[])
fork
현재 실행되는 프로세스에 대해 복사본 프로세스를 생성한다.
#include <unistd.h>
pid_t fork(void)
strerror
#include <string.h>
char *strerror(int errnum)
errno
#include <sys/errno.h>
extern int errno
exit
프로세스를 종료한다.
#include <stdlib.h>
void exit(int status)
int main()
함수의 반환값에 해당하는 정수opendir
지정한 디렉토리 열기
특정 디렉토리 안에 있는 파일과 디렉토리를 검색하기 위해 사용한다.
#include <dirent.h>
DIR *opendir(const char *filename)
readdir
opendir()
로 연 디렉토리에 대해, 그 안에 있는 모든 파일과 디텍토리 정보를 구한다.
#include <dirent.h>
struct dirent *readdir(DIR *dirp)
closedir
opendir()
로 연 디렉토리를 닫는다.
#include <dirent.h>
int closedir(DIR *dirp)
isatty
fd
에 대하여 유효한 단말 타입 디바이스를 참조하고 있는지 판단
#include <unistd.h>
int isatty(int fd)
ttyname
isatty
함수로 유효한 디바이스를 발견한 경우 디바이스 이름을 반환
#include <unistd.h>
char *ttyname(int fd)
ttyslot
디바이스 파일 발견 시 그 유니크 번호 반환
#include <unistd.h>
int ttyslot(void)
ioctl
하드웨어의 제어와 상태 정보를 얻기 위한 함수
#include <sys/ioctl.h>
int ioctl(int fd, unsigned long request, ...)
open
한 디바이스의 fd값getenv
환경 변수 목록 중에 원하는 변수값을 구한다.
#include <stdlib.h>
char *getenv(const char *name)
tcgetattr
터미널 파일 fd에 대한 터미널 속성을 termios_p에 저장
#include <termios.h>
int tcgetattr(int fd, struct termios *termios_p)
tcsetattr
터미널 파일 fd에 대한 터미널 속성을 설정
#include <termios.h>
int tcsetattr(int fd, int optional_actions, const struct termios *termios_p)
tgetent
단말명의 입력을 bp
의 버퍼에 추출한다.
#include <curses.h>
#include <term.h>
int tgetent(char *bp, const char *name)
tgetnum()
, tgetflga()
, tgetstr()
등의 호출을 해도 보관 유지된다.tgetflag
id
가 단말 엔트리에 존재하는지에 대한 boolean 정보
#include <curses.h>
#include <term.h>
int tgetflag(char *id)
tgetnum
id
가 단말 엔트리에 존재하는지에 대한 numeric 정보
#include <curses.h>
#include <term.h>
int tgetnum(char *id)
tgetstr
id
가 단말 엔트리에 존재하는지에 대한 string 정보
#include <curses.h>
#include <term.h>
char *tgetstr(char *id, char **area)
tgoto
매개변수를 지정된 기능으로 인스턴스화한다. 반환값은 tputs
함수로 전달된다.
#include <curses.h>
#include <term.h>
char *tgoto(const char *cap, int col, int row)
tputs
tgetstr
에서 반환된 문자열 출력
#include <curses.h>
#include <term.h>
int tputs(const char *str, int affcnt, int (*putc)(int))
tgetstr
에서 반환된 문자열
<
: input redirection
<<
: input redirection
>
: output redirection
>>
: output redirection
구분 | 장치 | fd |
---|---|---|
표준 입력 | 키보드 | 0 |
표준 출력 | 모니터 | 1 |
표준 에러 | 모니터 | 2 |