#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-1UNIX 내장 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비트에는 0optionWNOHANG : waitpid 실행시 자식 프로세스가 종료된 상태가 아니라면 대기하지않고 종료WUNTRACED : 프로세스의 종료뿐만이 아닌 멈춤상태도 감지하여 반환해줌종료된 자식 프로세스 pid_t-1#include <sys/wait.h>
pid_t wait3(int *status, int options, struct rusage *rusage);
*status : 종료된 자식프로세스의 상태를 저장할 저장공간0, 상위 8비트에는 종료시 exit()에 들어있던 인수시그널 번호, 상위 8비트에는 0optionWNOHANG : waitpid 실행시 자식 프로세스가 종료된 상태가 아니라면 대기하지않고 종료WUNTRACED : 프로세스의 종료뿐만이 아닌 멈춤상태도 감지하여 반환해줌*rusage : 자식 프로세스의 자원 사용량을 저장할 구조체waitpid 의 pid가 -1일때와 대부분 동일한 기능*rusage에는 자원의 사용량을 저장해줌종료된 자식 프로세스 pid_t-1waitpid와 동일한 기능을 하지만 다른점은 자원의 사용량을 알 수 있는 구조체인 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비트에는 0optionWNOHANG : waitpid 실행시 자식 프로세스가 종료된 상태가 아니라면 대기하지않고 종료WUNTRACED : 프로세스의 종료뿐만이 아닌 멈춤상태도 감지하여 반환해줌*rusage : 자식 프로세스의 자원 사용량을 저장할 구조체waitpid와 대부분 동일한 기능*rusage에 자원의 사용량을 저장해줌종료된 자식 프로세스 pid_t-1waitpid와 동일한 기능을 하지만 다른점은 자원의 사용량을 알 수 있는 구조체인 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 : 닫을 디렉토리의 DIRdirp를 닫아줌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 : 연결을 확인할 fdfd에 해당하는 파일 디스크립터가 터미널에 연결되어있는지 확인10 및 errno에 에러코드가 저장#include <unistd.h>
char *ttyname(int fd)
fd : 연결된 터미널을 확인할 fd10 및 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)
1name이 없으면 0-1getenv()에서 TERM을 조회하면 현재 장치의 이름을 알 수 있음#include <term.h>
int tgetnum(char *id)
id : 기능의 코드id에 해당하는 코드의 기능이 터미널에 존재한다면 양수 반환양수-1#include <term.h>
int tgetflag(char *id)
id : 기능의 코드id에 해당하는 코드의 기능이 터미널에 존재한다면 true 반환truefalse#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.