#include <readline/readline.h>
char *readline(const char *str)
*str
: 프롬포트에 출력할 문자열str
을 출력하고 프롬포트에서 표준입력으로 문자열을 입력받고 입력된 문자열을 반환-lreadline
라이브러리를 링크해주어야 함#include <readline/readline.h>
int rl_on_new_line (void)
readline
디렉토리에서 update관련 함수들에게 커서가 다음줄로 이동한것을 알려줌0
-1
-lreadline
라이브러리를 링크해주어야 함#include <readline/readline.h>
void rl_replace_line(const char *str, int clear_undo)
*str
: 대체해줄 문자열clear_undo
: 0이라면 undo_list
를 초기화하지않고 0이외의 값이라면 초기화rl_line_buffer
를 str
로 대체 해줌clear_undo
값이 0이라면 undo_list
를 초기화하지않고 아니라면 초기화undo_list
는 readline
에서 사용하는 undo
작업에 사용readline
라이브러리를 링크해주어야 함brew
를 이용해 readline
을 설치해주어야 함 (brew install readline
)brew info readline
을 사용해 readline
설치경로를 불러오고 컴파일시 -L
, -I
옵션을 추가해주어야 함#include <readline/readline.h>
void rl_redisplay(void);
rl_replace_line()
으로 변경한 rl_line_buffer
를 프롬포트에 함께 다시 출력 해줌readline
함수 사용시 입력했던 str
이 출력 됨readline
라이브러리를 링크해주어야 함#include <readline/history.h>
int add_history(const char *line);
line
: 대체할 문자열history
에 line
문자열을 추가 해줌0
-1
UNIX
내장 read_line
사용시 int
형을 반환하지만 GNU Library
의 read_line
을 사용시 반환값이 없음#include <sys/wait.h>
pid_t wait(int *status);
*status
: 종료된 자식프로세스의 상태를 저장할 저장공간0
, 상위 8비트에는 종료시 exit()
에 들어있던 인수시그널 번호
, 상위 8비트에는 0
종료된 자식 프로세스 pid_t
-1
#include <sys/wait.h>
pid_t waitpid(pid_t pid, int *status , int options);
pid
: 종료를 기다릴 프로세스의 pidpid == -1
일 때는 임의의 자식 프로세스를 기다림pid == 0
일 때는 waitpid
를 호출한 프로세스와 같은 프로세스 그룹의 자식프로세스를 기다림pid < -1
일 때는 pid
의 절대값이 프로세스 그룹id 인 자식 프로세스를 기다림pid > 0
일 때는 pid
가 프로세스의 id인 자식 프로세스를 기다림*status
: 종료된 자식프로세스의 상태를 저장할 저장공간0
, 상위 8비트에는 종료시 exit()
에 들어있던 인수시그널 번호
, 상위 8비트에는 0
option
WNOHANG
: waitpid
실행시 자식 프로세스가 종료된 상태가 아니라면 대기하지않고 종료WUNTRACED
: 프로세스의 종료뿐만이 아닌 멈춤상태도 감지하여 반환해줌종료된 자식 프로세스 pid_t
-1
#include <sys/wait.h>
pid_t wait3(int *status, int options, struct rusage *rusage);
*status
: 종료된 자식프로세스의 상태를 저장할 저장공간0
, 상위 8비트에는 종료시 exit()
에 들어있던 인수시그널 번호
, 상위 8비트에는 0
option
WNOHANG
: waitpid
실행시 자식 프로세스가 종료된 상태가 아니라면 대기하지않고 종료WUNTRACED
: 프로세스의 종료뿐만이 아닌 멈춤상태도 감지하여 반환해줌*rusage
: 자식 프로세스의 자원 사용량을 저장할 구조체waitpid
의 pid
가 -1일때와 대부분 동일한 기능*rusage
에는 자원의 사용량을 저장해줌종료된 자식 프로세스 pid_t
-1
waitpid
와 동일한 기능을 하지만 다른점은 자원의 사용량을 알 수 있는 구조체인 rusage
가 있어 자원의 사용량을 구할 수 있음#include <sys/wait.h>
pid_t wait4(pid_t pid, int *status, int options, struct rusage *rusage);
pid
: 종료를 기다릴 프로세스의 pidpid == -1
일 때는 임의의 자식 프로세스를 기다림pid == 0
일 때는 waitpid
를 호출한 프로세스와 같은 프로세스 그룹의 자식프로세스를 기다림pid < -1
일 때는 pid
의 절대값이 프로세스 그룹id 인 자식 프로세스를 기다림pid > 0
일 때는 pid
가 프로세스의 id인 자식 프로세스를 기다림*status
: 종료된 자식프로세스의 상태를 저장할 저장공간0
, 상위 8비트에는 종료시 exit()
에 들어있던 인수시그널 번호
, 상위 8비트에는 0
option
WNOHANG
: waitpid
실행시 자식 프로세스가 종료된 상태가 아니라면 대기하지않고 종료WUNTRACED
: 프로세스의 종료뿐만이 아닌 멈춤상태도 감지하여 반환해줌*rusage
: 자식 프로세스의 자원 사용량을 저장할 구조체waitpid
와 대부분 동일한 기능*rusage
에 자원의 사용량을 저장해줌종료된 자식 프로세스 pid_t
-1
waitpid
와 동일한 기능을 하지만 다른점은 자원의 사용량을 알 수 있는 구조체인 rusage
가 있어 자원의 사용량을 구할 수 있음#include <signal.h>
void *signal(int signo, void *(func))
signo
: 수신할 시그널의 종류(func)
:signo
시그널을 수신 했을 때 실행시킬 함수signo
시그널을 수신하게되면 (func)
함수를 실행 시키도록 하는 함수설정된 함수의 포인터
를 반환-1
반환#include <signal.h>
int kill(pid_t pid, int sig)
pid
: 종료를 기다릴 프로세스의 pidpid == -1
일 때는 호출한 프로세스가 전송할 수 있는 권한을 가진 모두에게 sig
시그널을 보냄pid == 0
일 때는 호출한 프로세스와 같은 프로세스 그룹의 프로세스 모두에게 sig
시그널을 보냄pid < -1
일 때는 pid
의 절대값이 프로세스 그룹id 인 프로세스에 sig
시그널을 보냄pid > 0
일 때는 pid
가 프로세스의 id인 프로세스에 sig
시그널을 보냄sig
시그널을 전송함0
-1
#include <stdlib.h>
void exit(int status)
status
: 현재의 종료가 정상종료라면 0, 비정상 종료라면 0보다 큰 값status
값과 제어를 반환#include <unistd.h>
char *getcwd(char *buf, size_t size);
*buf
: full path
를 저장할 저장공간size
: buf
에 할당된 저장공간 크기full path
를 \0
로 끝나는 문자열로 buf
에 저장하고 반환size
의 크기가 full path
의 길이보다 작다면 NULL을 반환full path
를 저장한 문자열NULL
반환 및 errno
에 에러정보 저장EACCES
: path
구성 중의 디렉토리에 search
권한이 없음EINVAL
: buf
는 NULL
이 아닌데, size
가 0
임ENAMETOOLONG
: full path
가 너무 길거나 한 디렉토리명이 너무김ENOENT
: 현재 작업 디렉토리가 unlink
됨ERANGE
: full path
를 저장할 buf
의 size
가 작음buf
가 NULL
이라면 자동으로 malloc
으로 공간을 할당하여 저장하고 반환free
해주어야 함#include <unistd.h>
int chdir(const char * path)
path
: 변경할 디렉토리의 경로path
로 변경해줌0
-1
, errno에 에러정보 저장EACCES
: path
구성 중의 디렉토리에 search 권한이 없음EFAULT
: path
변수 자체가 잘못된 주소ENAMETOOLONG
: Full Path
명이 너무 길거나 한 디렉토리명이 너무김ENOENT
: 존재하지 않는 파일임ENOTDIR
: 디렉토리가 아님#include <sys/stat.h>
int stat(const char *pathname, struct stat *buf);
pathname
: 상태를 알아올 파일의 경로buf
: 파일의 상태를 알아온 뒤 상태들을 저장할 stat
구조체struct stat {
dev_t st_dev; /* device */
ino_t st_ino; /* inode */
mode_t st_mode; /* protection */
nlink_t st_nlink; /* number of hard links */
uid_t st_uid; /* user ID of owner */
gid_t st_gid; /* group ID of owner */
dev_t st_rdev; /* device type (if inode device) */
off_t st_size; /* total size, in bytes */
blksize_t st_blksize; /* blocksize for filesystem I/O */
blkcnt_t st_blocks; /* number of blocks allocated */
time_t st_atime; /* time of last access */
time_t st_mtime; /* time of last modification */
time_t st_ctime; /* time of last change */
};
pathname
경로인 파일의 상태를 buf
에 저장0
-1
, 에러 정보는 errno
에 저장EACCES
: path
구성 중의 디렉토리에 search 권한이 없음EFAULT
: path
변수 자체가 잘못된 주소ENAMETOOLONG
: path
가 너무 길거나 폴더 이름이 너무 김ENOENT
: path
가 빈 문자열이거나 path
를 구성하는 directory
중에서 없는 directory
가 있음ENOMEM
: 메모리가 부족ENOTDIR
: path
를 구성하는 directory
중에서 directory
가 아닌 것이 있음EOVERFLOW
: 32bit OS에서 컴파일시에 -D_FILE_OFFSET_BITS=64
옵션없이 컴파일하여pathname
의 파일이 symbolic link
라면 link
되어있는 원본파일의 정보를 가져옴#include <sys/stat.h>
int lstat(const char *pathname, struct stat *buf);
pathname
: 상태를 알아올 파일의 경로buf
: 파일의 상태를 알아온 뒤 상태들을 저장할 stat
구조체pathname
경로인 파일의 상태를 buf
에 저장0
-1
, 에러 정보는 errno
에 저장 (stat()
과 동일)pathname
의 파일이 symbolic link
라면 symbolic link
인 파일 그 자체의 정보를 가져옴#include <sys/stat.h>
int fstat(int fd, struct stat *buf);
fd
: open()으로 불러온 파일의 fdbuf
: 파일의 상태를 알아온 뒤 상태들을 저장할 stat
구조체open()
으로 불러온 파일의 fd
값으로 파일의 정보를 가져와 buf
에 저장0
-1
, 에러 정보는 errno
에 저장#include <unistd.h>
int unlink(const char* pathname)
pathname
: 파일의 경로path
에 있는 파일을 삭제하고 원본 파일의 Link
카운트를 1 감소 시킴link
하고있는 파일이 모두 없어져 카운트가 0이된다면 해당 원본파일의 메모리를 삭제함0
-1
#include <unistd.h>
int execve(const char *filepath, char *const argv[], char *const envp[]);
filepath
: 실행할 binary파일
또는 shell파일
, 정확한 경로를 지정해주어야 함argv[]
: main함수의 argv와 같음, arg 인수 목록이며 filepath
에 전달됨envp
: 환경변수 목록이며 filepath
에 전달됨filepath
를 현재 실행중인 프로세스에 적재하여 기존에 수행하던 기능을 중단하고 filepath
의 기능을 실행한다없음
-1
및 errno
에 에러정보 저장#include <dirent.h>
DIR *opendir(const char *name);
name
: 열 파일의 경로name
에 해당하는 디렉토리 내부 파일의 정보를 읽어오기위해 파일을 열어줌디렉토리 스트림 포인터
NULL
및 errno
에 에러정보 저장#include <dirent.h>
struct dirent *readdir(DIR *dirp);
dirp
: opendir()
함수를 통해 받아온 디렉토리 스트림 포인터
dirp
에 해당하는 디렉토리의 정보를 읽고 정보를 담은 구조체 포인터를 반환struct dirent {
ino_t d_ino; /* Inode number */
off_t d_off; /* Not an offset; see below */
unsigned short d_reclen; /* Length of this record */
unsigned char d_type; /* Type of file; not supported by all file system types */
char d_name[256]; /* Null-terminated filename */
};
dirent 구조체 포인터
NULL
및 errno
에 에러정보 저장#include <dirent.h>
int closedir(DIR *dirp);
dirp
: 닫을 디렉토리의 DIR
dirp
를 닫아줌0
-1
및 errno
에 에러정보 저장#include <string.h>
char *strerror(int errno);
errno
: 에러코드errno
에 해당하는 에러메시지를 반환errno
에 해당하는 에러메시지의 포인터Unknown error : errnum
반환#include <errno.h>
#include <unistd.h>
int isatty(int fd)
fd
: 연결을 확인할 fd
fd
에 해당하는 파일 디스크립터가 터미널에 연결되어있는지 확인1
0
및 errno
에 에러코드가 저장#include <unistd.h>
char *ttyname(int fd)
fd
: 연결된 터미널을 확인할 fd
1
0
및 errno
에 에러코드가 저장#include <unistd.h>
int ttyslot(void)
터미널의 인덱스
0
#include <sys/ioctl.h>
int ioctl(int fd, unsigned long request, ...)
fd
: open()
으로 연 파일 디스크립터request
: 디바이스에 전달해줄 명령. . .
: 명령 수행시 필요한 인자read()
나 write()
와 같이 읽기, 쓰기를 할 수 있음read()
, write()
로 할수없는 하드웨어 제어나 상태 정보를 얻기위해 사용#include <stdlib.h>
char *getenv(const char *name)
name
: 찾을 환경변수의 이름name
에 해당하는 이름의 환경변수를 찾은 뒤 값을 반환name 환경변수의 값
NULL
#include <termios.h>
int tcgetattr(int fildes, struct termios *termios_p)
fildes
: 속성을 받아올 터미널termios_p
: 터미널의 속성을 저장하는 구조체struct termios {
tcflag_t c_iflag; /* input flags */
tcflag_t c_oflag; /* output flags */
tcflag_t c_cflag; /* control flags */
tcflag_t c_lflag; /* local flags */
cc_t c_cc[NCCS]; /* control chars */
speed_t c_ispeed; /* input speed */
speed_t c_ospeed; /* output speed */
};
termios_p
에 저장0
, termios_p
에 터미널 속성 저장-1
, errno
에 에러정보 저장#include <termios.h>
int tcsetattr(int fildes, int option, const struct termios *termios_p)
인자
fildes
: 설정을 변경할 터미널option
: 터미널에 설정이 언제 적용될지 지정하는 옵션TCSANOW
: 즉시 적용TCSADRAIN
: fildes
에 관한 모든 출력이 이루어진 뒤 동작, 출력과 관련된 파라메터를 변경할 때 사용TCSAFLUSH
: fildes
에 관한 모든 출력및 입력이 이루어진 뒤 동작, 변경되는 중간에 들어온 입력은 버림termios_p
: 터미널의 속성이 들어있는 구조체기능
fildes
터미널의 설정을 termios_p
에 되어있는 속성으로 설정반환값
0
-1
, errno
에 에러정보 저장주의사항
#include <term.h>
int tgetent(char *bp, const char *name)
1
name
이 없으면 0
-1
getenv()
에서 TERM
을 조회하면 현재 장치의 이름을 알 수 있음#include <term.h>
int tgetnum(char *id)
id
: 기능의 코드id
에 해당하는 코드의 기능이 터미널에 존재한다면 양수 반환양수
-1
#include <term.h>
int tgetflag(char *id)
id
: 기능의 코드id
에 해당하는 코드의 기능이 터미널에 존재한다면 true
반환true
false
#include <term.h>
char *tgetstr(char *id, char **area)
id
: 기능의 코드area
: 버퍼포인터, 일반적으로 NULL 사용id
에 해당하는 코드의 기능이 터미널에 존재한다면 문자열로 반환문자열
NULL
#include <term.h>
char *tgoto(const char *cap, int col, int row)
cap
: 기능 코드cm
(cursor monitor)BC
(back space)UP
(cursor up)col
: 열row
: 행NULL
#include <term.h>
int tputs(const char *str, int affcnt, int (*putc)(int))
str
: tgetstr() 이나 tgoto()의 반환값affcnt
: 영향을 받을 라인의 수 (여러줄에 영향을 주는것이 아닌 일반적인 상황에선 1
)*putc
: ASCII문자값을 받아 표준출력으로 출력할 값0
-1
#include <unistd.h>
int dup(int fildes);
fildes
: 복제할 fdfildes
로 받은 파일 서술자를 복제하여 반환한다.fd(새 파일 서술자)
-1
#include <unistd.h>
int dup2(int fildes, int fildes2);
fildes
: 복제할 fdfildes2
: 새 fd값을 넣을 곳fildes
로 받은 파일 서술자를 fildes2
로 복제한다.fildes2
가 이미 열려 있다면, 열려 있던 fd를 닫고 복제한다.dup2(fd, stdout);
을 하면 stdout(표준출력)
은 fd로 향한다.fd(새 파일 서술자)
-1
#include <unistd.h>
int pipe(int fildes[2]);
fildes[0]
: 파이프 출력 fdfildes[1]
: 파이프 입력 fd0
반환-1
반환[EFAULT] The fildes buffer is in an invalid area of the
process's address space.
[EMFILE] Too many descriptors are active.
[ENFILE] The system file table is full.