[minishell] 사용가능 함수 정리

개발하는 곰댕이·2021년 8월 13일
0

42Seoul

목록 보기
3/45

minishell에서 사용 가능한 함수를 정리해 봤습니다.
여기에서 빠진 함수들은 이전 과제에서 설명했던 함수거나, 이미 사용하고있던 함수입니다.
그리고 과제를 하면서 사용하지 않았던 함수도 많다보니 부족한 부분이 있다면 말씀해주세요...!

사용 가능 함수

readline, rl_on_new_line, rl_replace_line, rl_redisplay, add_history, printf, malloc, free, write, open, read, close, fork, wait, waitpid, wait3, wait4, signal, kill, exit, getcwd, chdir, stat, lstat, fstat, unlink, execve, dup, dup2, pipe, opendir, readdir, closedir, strerror, errno, isatty, ttyname, ttyslot, ioctl, getenv, tcsetattr, tcgetattr, tgetent, tgetflag, tgetnum, tgetstr, tgoto, tputs

readline 관련 & SIGNAL 처리

readline

  • 함수 원형
#include <readline/readline.h>
#include <readline/history.h>

char *readline (const char *prompt);
  • 용도
    readline은 char *prompt를 터미널에 띄워주고 터미널에서 입력된 문자열을 리턴해 줍니다.

  • 매개변수
    출력할 문자열

  • 리턴 값
    읽어들인 문자열을 리턴합니다.(개행이 제거됩니다.)
    빈 문자열이라면 빈 문자열을 리턴합니다.
    만약 어떤 값도 읽어들이지 못 한다면 NULL을 리턴합니다.(EOF)

  • 기타
    readline내부에서 errno를 세팅합니다. 예를어서 헤더파일을 잘 못 설정한다면 errno=2가 설정되고 문제가 없다면 errno=0이 됩니다.

rl_on_new_line

  • 함수 원형
#include <readline/readline.h>
#include <readline/history.h>

int rl_on_new_line()
  • 용도
    readline함수에 프롬프트가 새로운 줄을 만났다고 알려줍니다.
    보통 개행을 출력한 후에 사용하며 시그널을 처리할때 사용합니다.
    주로 rl_replace_line 및 rl_redisplay와 같이 사용합니다.

rl_replace_line

mac에서는 포함되지 않아서 brew를 통해서 readline을 설치한 후 나오는 옵션을 넣어서 컴파일 해주세요.

ex)
-L/usr/local/opt/readline/lib
-I/usr/local/opt/readline/include
  • 함수 원형
void rl_replace_line (const char *text, int clear_undo)
  • 용도
    readline함수의 rl_line_buffer를 char *text로 대체합니다.

rl_redisplay

  • 함수 원형
#include <readline/readline.h>
#include <readline/history.h>

void rl_redisplay (void)
  • 용도
    rl_replace_line로 바꾼 rl_line_buffer를 prompt에 출력합니다.

add_history

  • 함수 원형
#include <readline/readline.h>
#include <readline/history.h>

void add_history (char *string)
  • 용도
    char *string을 히스토리 목록에 넣습니다.
    이렇게 넣어진 문자열은 readline에서 방향키로 확인해볼 수 있습니다.

프로세스 관련

pipe

  • 함수 원형
#include <unistd.h>

int pipe(int pipefd[2]);
  • 용도
    프로세스 간 통신을 할 수 있는 파이프를 생성합니다.
  • 매개변수
    • pipefd[2]
      파이프의 입력 및 출력으로 사용되는 파일 디스크립터입니다.
      pipe[0]은 읽기용, pipe[1]은 쓰기용 입니다.
  • 리턴 값
    성공 시 0을 리턴합니다.
    실패 시 -1을 리턴하고 errno에 해당 에러를 표시합니다.
    그리고 pipefd는 실패해도 변경되지 않고 그대로 있습니다.
  • 에러코드
    참고 : pipe - Linux manual page

fork

  • 함수 원형
#include <unistd.h>

pid_t fork(void);
  • 용도
    fork함수를 사용한 프로세스를 복제하여 새로운 프로세스를 만듭니다.
    이렇게 만들어진 프로세스는 자식 프로세스로 참조되고, 해당 함수를 불러낸 프로세스는 부모 프로세스로 참조됩니다.

    자식 프로세스는 부모프로세스와 분리된 별도의 메모리 영역을 사용하게 됩니다.
    이 메모리 영역에는 부모 프로세스가 fork함수를 호출하기 이전까지의 메모리 영역을 그대로 복사하게 되고, 자식프로세스는 이렇게 복사된 메모리를 토대로 fork함수를 호출한 이후의 시점부터 부모프로세스와 별개로 실행되게 됩니다.

    성공시, 부모 프로세스에 자식 프로세스의 PID를 리턴하고 자식 프로세스에는 0을 리턴합니다.
    실패시, 자식 프로세스는 생성되지 않고 부모 프로세스에는 -1을 리턴한 뒤 errno에 error코드를 표시합니다.

  • 에러코드

    • EAGAIN
      시스템에서 새로운 프로세스 생성을 제한했습니다.
    • ENOMEM
      메모리가 부족하여 프로세스를 할당하지 못했거나 이미 종료된 프로세스에서 초기화를 시도했습니다.
    • ENOSYS
      fork함수가 현재 플랫폼에서 지원하지 않습니다.
    • ERESTARTNOINTR (since Linux 2.6.17)
      시스템콜이 시그널에 의해 중단되거나 다시 시작되었습니다.

wait

  • 함수 원형
#include <sys/wait.h>

pid_t wait(int *wstatus);
  • 용도
    자식 프로세스가 종료되는 걸 기다리고 종료된 자식 프로세스의 자원을 반환하는 역할을 합니다.
    만약 종료된 프로세스의 자원을 반환하지 않는다면 좀비상태가 되어 남아있게 됩니다.
    그리고 해당 함수를 호출할 때 자식 프로세스가 종료된 상태라면 바로 리턴을 호출하고, 그게 아니라면 종료되거나, 시그널 핸들러가 호출을 중단시킬때까지 대기합니다.

  • 매개변수

    • wstatus
      상태가 변경된 프로세스의 정보가 담깁니다.
      • WIFEXITED
        자식프로세스가 메인에서 리턴되거나 _exit(), exit()등에 의해서 정상종료 됨을 뜻합니다.
        • WEXITSTATUS
          이 매크로는 WIFEXITED가 true일때만 사용해야 하며 _exit(), exit()의 인자 혹은 메인에서 리턴된 값의 하위 8비트로 구성됩니다.
      • WIFSIGNALED
        자식 프로세스가 시그널에 의해서 종료됨을 뜻합니다.
        • WTERMSIG
          WIFSIGNALED가 true일때만 사용 가능하며 자식 프로세스가 종료되었다는걸 뜻하며 어떤 시그널에 의해 종료되었는지 알려줍니다.
        • WCOREDUMP
          WIFSIGNALED가 true를 리턴했을때만 사용 가능하며 해당 자식 프로세스에서 core dump가 생성되었을때 ture를 반환합니다.
      • WIFSTOPPED
        WUNTRACED를 사용하거나 자식프로세스가 traced될 때만 사용되며 자식 프로세스가 시그널에 의해 멈췄을 때 true를 반환합니다.
        • WSTOPSIG
          WIFSTOPPED가 true일때만 사용 가능하며 해당 시그널을 반환합니다.
      • WIFCONTINUED
        멈춘 자식 프로세스가 다시 동작할 때 true를 반환합니다.
  • 리턴 값
    정상 종료 시 자식 프로세스의 pid, 실패 시 -1을 반환합니다.

  • 에러코드

    • ECHILD
      프로세스가 존재하지 않거나, 호출 프로세스의 자식 프로세스가 아닙니다.
    • EINVAL
      잘못된 옵션을 사용했습니다.

waitpid

  • 함수 원형
#include <sys/wait.h>

pid_t waitpid(pid_t pid, int *wstatus, int options);
  • 용도
    기본적으로 wait과 동일한 동작을 하거나, 옵션을 통해서 자식프로세스의 상태 변경을 기다릴 수도 있습니다.
    그리고 첫 번째 매개변수인 pid에 의해 지정된 자식 프로세스만을 대상으로 합니다.

  • 매개변수

    • pid
      • -1보다 작은 값
        pid의 절댓값과 동일한 프로세스 그룹 ID를 가진 자식프로세스를 대상으로 합니다.
      • -1
        모든 자식 프로세스를 대상으로 합니다.
      • 0
        waitpid함수를 호출한 프로세스와 동일한 프로세스 그룹 ID를 가진 자식프로세스를 대상으로 합니다.
      • 0보다 큰 값
        해당 pid와 동일한 값을 가진 프로세스만을 대상으로 합니다.
    • wstatus
      상태가 변경된 프로세스의 정보가 담깁니다.
      참고 : wait
    • options
      • WNOHANG
        종료된 자식 프로세스가 없다면 즉시 리턴합니다.
      • WUNTRACED
        자식프로세스가 멈춘다면 리턴합니다.
      • WCONTINUED
        멈췄던 자식프로세스가 재개된 경우 리턴합니다.
  • 리턴 값
    정상 종료시 상태 변경된 자식 프로세스의 PID를 반환합니다.
    만약 WNOHANG옵션이 사용되고 자식 프로세스가 아직 상태가 변경되지 않은 상태라면 0을 리턴합니다.
    실패시 -1을 리턴합니다.

  • 에러코드
    참고 : wait

wait3, wait4

waitpid나 waitid를 사용하라고 합니다.

폴더 관련

getcwd

  • 함수 원형
#include <unistd.h>

char *getcwd(char *buf, size_t size);
  • 용도
    현재 작업폴더의 절대경로를 size만큼 buf에 복사합니다.
  • 매개변수
    • buf
      절대경로가 복사될 버퍼
    • size
      복사할 길이
  • 리턴 값
    성공 시 현재 작업폴더의 절대경로를 리턴합니다. (buf와 동일)
  • 에러코드
    • EACCES
      파일을 읽거나, 검색할 수 있는 권한이 없습니다.
    • EFAULT
      buf가 잘못된 주소를 갖고있습니다.
    • EINVAL
      size가 0거나 buf가 NULL이 아닙니다.
    • ENOENT
      현재 작업폴더가 연결되어있지 않습니다.
    • ENOMEM
      메모리가 부족합니다.
    • ERANGE
      size가 현재 작업폴더의 절대경로의 길이(종료문자 '\0'포함)보다 작습니다.

chdir

  • 함수 원형
#include <unistd.h>

int chdir(const char *path);
  • 용도
    호출 프로세스의 현재 작업경로를 path로 변경합니다.
  • 매개변수
    • path
      변경될 작업경로
  • 리턴 값
    성공 시 0, 실패 시 -1을 리턴하고 errno에 해당 에러를 표시합니다.
  • 에러코드
    • EACCES
      path의 경로 중 검색권한이 거부된 곳이 있습니다.
    • EFAULT
      접근 가능한 범위를 벗어났습니다.
    • EIO
      I/O 에러 발생
    • ELOOP
      경로 확인 중 너무 많은 심볼릭 링크가 있습니다.
    • ENAMETOOLONG
      path가 너무 깁니다.
    • ENOENT
      존재하지 않는 path입니다.
    • ENOMEM
      사용 가능한 메모리가 부족합니다.
    • ENOTDIR
      path의 경로 중 폴더가 아닌 부분이 있습니다.

opendir

  • 함수 원형
#include <dirent.h>

DIR *opendir(const char *name);

typedef struct {
	int	__dd_fd;	/* file descriptor associated with directory */
	long	__dd_loc;	/* offset in current buffer */
	long	__dd_size;	/* amount of data returned */
	char	*__dd_buf;	/* data buffer */
	int	__dd_len;	/* size of data buffer */
	long	__dd_seek;	/* magic cookie returned */
	__unused long	__padding; /* (__dd_rewind space left for bincompat) */
	int	__dd_flags;	/* flags for readdir */
	__darwin_pthread_mutex_t __dd_lock; /* for thread locking */
	struct _telldir *__dd_td; /* telldir position recording */
} DIR;
  • 용도
    name에 해당하는 디렉토리 스트림의 포인터를 리턴합니다.
  • 매개변수
    • name
      오픈할 디렉토리 명
  • 리턴 값
    성공 시 name에 해당하는 디렉토리 스트림의 포인터를 리턴합니다.
    실패 시 NULL을 리턴하고, errno에 해당 에러를 표시합니다.
  • 에러코드
    참고 : opendir — Linux manual page

readdir

  • 함수 원형
#include <dirent.h>

struct dirent *readdir(DIR *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 filesystem types */
	char           d_name[256]; /* Null-terminated filename */
};
  • 용도
    dirp에 해당하는 폴더의 정보를 읽고 해당 구조체의 포인터를 리턴합니다.
  • 매개변수
    • dirp
      정보를 읽을 폴더의 포인터
  • 리턴 값
    성공 시 폴더에 대한 정보를 가진 구조체의 포인터를 리턴하고 만약 모든 정보를 읽어들였다면 NULL을 리턴합니다.
    실패 시 NULL을 리턴하고 errno에 해당 에러를 표시합니다.
  • 에러코드
    참고 : readdir — Linux manual page

closedir

  • 함수 원형
#include <dirent.h>

int closedir(DIR *dirp);
  • 용도
    열려있는 dirp를 닫습니다.
  • 매개변수
    • dirp
      디렉토리 스트림의 포인터
  • 리턴 값
    성공 시 0을 리턴합니다.
    실패 시 -1을 리턴하고 errno에 해당 에러를 표시합니다.
  • 에러코드
    참고 : closedir — Linux manual page

파일 관련

stat

  • 함수 원형
#include <sys/stat.h>

int stat(const char *path, struct stat *buf);

struct stat {
	dev_t     st_dev;         /* ID of device containing file */
	ino_t     st_ino;         /* Inode number */
	mode_t    st_mode;        /* File type and mode */
	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 ID (if special file) */
	off_t     st_size;        /* Total size, in bytes */
	blksize_t st_blksize;     /* Block size for filesystem I/O */
	blkcnt_t  st_blocks;      /* Number of 512B blocks allocated */

	/* Since Linux 2.6, the kernel supports nanosecond
	precision for the following timestamp fields.
	For the details before Linux 2.6, see NOTES. */

	struct timespec st_atim;  /* Time of last access */
	struct timespec st_mtim;  /* Time of last modification */
	struct timespec st_ctim;  /* Time of last status change */

	#define st_atime st_atim.tv_sec      /* Backward compatibility */
	#define st_mtime st_mtim.tv_sec
	#define st_ctime st_ctim.tv_sec
};
  • 용도
    path의 파일에 대한 정보를 검색해서 buf에 복사합니다.
  • 매개변수
    • path
      파일의 경로
    • buf
      정보가 저장될 버퍼
  • 리턴 값
    성공 시 0, 에러 시 -1을 리턴하고 errno에 해당 에러를 표시합니다.
  • 에러코드
    • EACCES
      path의 경로 검색 중 권한이 거부되었습니다.
    • EFAULT
      잘못된 주소입니다.
    • ELOOP
      path경로 중 너무 많은 심볼릭 링크가 있습니다.
    • ENAMETOOLONG
      path가 너무 깁니다.
    • ENOENT
      존재하지않는 path거나 잘못된 심볼릭링크입니다.
    • ENOMEM
      메모리가 부족합니다.
    • ENOTDIR
      path의 경로 중 폴더가 아닌 곳이 있습니다.
    • EOVERFLOW
      해당 플랫폼에서 해석할 수 없는 파일입니다.
    • EBADF
      잘못된 fd가 사용되었습니다.

lstat

  • 함수 원형
#include <sys/stat.h>

int lstat(const char *path, struct stat *buf);
  • 용도
    path가 심볼릭링크인 경우를 제외하고 stat과 동일한 동작을 합니다. 만약 심볼릭 링크라면 파일이 아닌 링크 자체에 대한 정보를 반환합니다.
  • 매개변수
    • path
      파일의 경로
    • buf
      정보가 저장될 버퍼
  • 리턴 값
    성공 시 0, 에러 시 -1을 리턴하고 errno에 해당 에러를 표시합니다.
  • 에러코드
    참고 : stat

fstat

  • 함수 원형
#include <sys/stat.h>

int fstat(int fd, struct stat *buf);
  • 용도
    검색할 파일을 fd로 지정하는 것 외에는 stat과 동일한 동작을 합니다.
  • 매개변수
    • fd
      검색할 정보입니다.
    • buf
      정보가 저장될 버퍼
  • 리턴 값
    성공 시 0, 에러 시 -1을 리턴하고 errno에 해당 에러를 표시합니다.
  • 에러코드
    참고 : stat
  • 함수 원형
#include <unistd.h>

int unlink(const char *pathname);
  • 용도
    pathname에 해당하는 파일을 삭제합니다.
  • 매개변수
    삭제할 파일
  • 리턴 값
    성공 시 0, 실패 시 -1을 리턴하고 errno에 해당 에러를 표시합니다.
  • 에러코드
    • EACCES
      pathname의 경로 중 검색 권한이 없는 부분이 있습니다.
    • EBUSY
      pathname이 시스템에서 사용중이거나, 다른 프로세스에서 사용중이므로 연결을 해제할 수 없습니다.
    • EFAULT
      pathname의 경로가 액세스 가능한 범위 밖에 있습니다.
    • EIO
      I/O 에러 발생
    • EISDIR
      pahtname에 해당하는 곳이 디렉토리 입니다.
    • ELOOP
      링크가 너무 많습니다.
    • ENAMETOOLONG
      pathname이 너무 깁니다.
    • ENOENT
      pathname이 잘못 되었습니다.
    • ENOMEM
      메모리가 부족합니다.
    • ENOTDIR
      pathname 경로 중 디렉토리가 아닌 부분이 존재합니다.
    • EPERM
      시스템에서 언링크를 허용하지 않거나 호출 프로세스에서 권한이 없습니다.

execve

  • 함수 원형
#include <unistd.h>


int execve(const char *pathname, char *const argv[], char *const envp[]);
  • 용도
    pathname에 해당하는 파일을 실행시키고, 호출 프로세스의 stack, heap, data 등의 영역은 새롭게 실행한 파일의 데이터로 초기화됩니다.
    그리고 pathname은 이진실행파일이거나, 스크립트여야만 하며, argv, envp는 마지막이 NULL로 종료되어야만 합니다.
    그리고 파일 실행이 성공했다면 해당 프로세스와 함수를 호출한 프로세스는 종료됩니다.
  • 매개변수
    • pathname
      실행할 파일경로 및 파일 명
    • argv
      새롭게 실행될 프로그램에 전달될 인수
    • envp
      새롭게 실행될 프로그램에 전달될 환경변수
      key=value의 형태로 전달되어야 합니다.
  • 리턴 값
    성공 시 리턴하지 않습니다. 하지만 실패 시 -1을 리턴하고 errno에 해당 에러를 표시합니다.
  • 에러코드
    참고 : execve - Linux manual page

파일디스크립터 관련

dup

  • 함수 원형
#include <unistd.h>

int dup(int oldfd);
  • 용도
    oldfd와 동일한 파일 디스크립터를 남아있는 파일 디스크립터 중 가장 작은 수에 할당합니다.
  • 매개변수
    • oldfd
      복제할 파일 디스크립터
  • 리턴 값
    할당된 파일 디스크립터의 숫자
  • 에러코드
    참고 : dup - Linux manual page

dup2

  • 함수 원형
#include <unistd.h>

int dup2(int oldfd, int newfd);
  • 용도
    dup와 비슷한 동작을 하지만 dup2는 newfd가 가리키고 있는 파일을 oldfd가 가리키고 있는 파일로 바꿉니다.
    간단하게 말하면 dup2(fd, STDIN_FILENO)을 하게되면 해당 프로세스에서는 fd가 표준입력의 역할을 하고, 기존의 표준 입력은 닫아버리고 사용하지 않는다고 생각하면 편합니다.
    dup정리를 보셔도 좋습니다.
    • oldfd
      복제할 파일 디스크립터
    • newfd
      할당하고싶은 fd
  • 리턴 값
    할당된 파일 디스크립터의 숫자
  • 에러코드
    참고 : dup - Linux manual page

에러 관련

strerror

  • 함수 원형
#include <string.h>

char *strerror(int errnum);
  • 용도
    errnum에 해당하는 오류 메시지의 포인터를 리턴합니다. 리턴된 문자열은 컴파일러 및 환경에 따라 다르며 이 값은 free해서는 안됩니다.
  • 매개변수
    • errnum
      에러넘버
  • 리턴 값
    errnum에 해당하는 오류 메시지의 포인터를 리턴합니다.
    만약 알 수 없는 에러코드라면 Unknown error: errnum을 리턴합니다.
  • 에러코드
    참고 : strerror — Linux manual page

errno

  • 함수 원형
#include <errno.h>
  • 용도
    errno는 errno.h에 정의되어있는 int형태의 변수입니다.
    에러 발생 시 errno의 값이 해당 에러의 에러번호로 변경됩니다.

터미널 관련

isatty

  • 함수 원형
#include <unistd.h>

int isatty(int fd);
  • 용도
    fd에 해당하는 파일 디스크립터가 터미널에 연결되어 있는지 확인합니다.
  • 매개변수
    • fd
      검사할 fd
  • 리턴 값
    터미널에 연결되어 있다면 1을 리턴합니다.
    만약 터미널이 아닌 다른 파일을 가리키고 있는 등 터미널을 참조하고 있지 않다면 0을 리턴하고 errno에 해당 에러를 표시합니다.
  • 에러코드
    참고 : isatty(3) — Linux manual page
    참고 : termios

ttyname

  • 함수 원형
#include <unistd.h>

char *ttyname(int fd);
  • 용도
    fd에 연결된 터미널의 이름을 리턴합니다.
  • 매개변수
    • fd
      확인할 fd
  • 리턴 값
    터미널에 연결되어 있다면 해당 터미널의 이름을 리턴합니다.
    실패 시 NULL을 리턴하고 errno에 해당 에러를 표시합니다.
  • 에러코드
    참고 : ttyname(3) — Linux manual page

ttyslot

  • 함수 원형
#include <unistd.h>

int ttyslot(void);
  • 용도
    /etc/ttys파일에 있는 항목 중 호출 프로세스에서 사용중인 터미널의 인덱스를 반환하며, 일반적으로 이 값은 /etc/파일에 있는 현재 사용자에 대한 항목의 인덱스와 동일합니다.
  • 리턴 값
    사용중인 터미널의 인덱스를 리턴하고
    실패 시 0을 리턴합니다.

tcgetattr

  • 함수 원형
#include <termios.h>

int tcgetattr(int fildes, struct termios *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 구조체

  • 용도
    현재 터미널의 속성을 받아옵니다.
  • 매개변수
    • fildes
      속성을 받아올 터미널
    • termios_p
      터미널의 속성이 저장될 구조체
  • 리턴 값
    성공 시 0, 실패 시 -1을 리턴하고 errno를 설정합니다.
  • 에러코드
    참고 : tcgetattr(3p) — Linux manual page

tcsetattr

  • 함수 원형
#include <termios.h>

int tcsetattr(int fildes, int optional_actions, const struct termios *termios_p);
  • 용도
    fildes에 해당하는 터미널의 설정을 변경할 수 있습니다.
  • 매개변수
    • fildes
      설정을 변경할 터미널
    • optional_actions
      변경된 터미널의 설정이 언제 적용될지 설정할 수 있습니다.
      • TCSANOW
        즉시 적용
      • TCSADRAIN
        fildes에 관한 모든 출력이 이루어진 뒤 동작합니다. 이 함수는 출력과 관련된 파라메터를 변경할 때 사용합니다.
      • TCSAFLUSH
        fildes에 관한 모든 출력및 입력이 이루어진 뒤 동작합니다. 만약 변경되는 중간에 들어온 입력은 버려집니다.
    • termios_p
      터미널의 속성이 들어있는 구조체 입니다.
  • 리턴 값
    성공 시 0, 실패 시 -1을 리턴하고 errno를 설정합니다.
  • 에러코드
    참고 : tcsetattr(3p) — Linux manual page

tgetent

  • 함수 원형
#include <term.h>

int tgetent(char *bp, const char *name);
  • 용도
    name에 대한 항목을 가져옵니다.

  • 리턴 값
    성공 시 1, 해당 항목이 없는 경우는 0, terminfo 데이터베이스를 찾을 수 없는 경우 -1을 리턴합니다.

tgetflag

  • 함수 원형
#include <term.h>

int tgetflag(char *id);
  • 용도
    id가 사용 가능한지 알려줍니다. (boolean)
  • 리턴 값
    사용가능하면 1, 아니면 0을 리턴합니다.

tgetnum

  • 함수 원형
#include <term.h>

int tgetnum(char *id);
  • 용도
    tgetflag와 동일한 역할을 수행합니다.(numeric)
  • 리턴 값
    사용이 불가능하면 -1을 리턴합니다.

tgetstr

  • 함수 원형
#include <term.h>

char *tgetstr(char *id, char **area);
  • 용도
    tgetflag와 동일한 역할을 수행하지만 해당 내용을 문자열로 출력하고 area에도 저장합니다.
  • 리턴 값
    실패 시 NULL을 리턴합니다.

tgoto

  • 함수 원형
#include <term.h>

char *tgoto(const char *cap, int col, int row);
  • 용도
    cap에 따라서 매개변수를 인스턴스화 시킵니다. 이 함수의 출력은 tputs로 전달됩니다.
  • 리턴 값
    출력할 문자열을 리턴합니다.

tputs

  • 함수 원형
#include <term.h>

int tputs(const char *str, int affcnt, int (*putc)(int));
  • 용도
    패딩 인포메이션을 str에 적용합니다.
  • 매개변수
    • affcnt
      영향을 받는 행의 번호
    • int (*putc)(int)
      char가 한번에 하나씩 전달되는 putchar와 동일한 일을 합니다.
  • 리턴 값
    str이 NULL이면 에러를 반환합니다.

환경변수 관련

getenv

  • 함수 원형
#include <stdlib.h>

char *getenv(const char *name);
  • 용도
    name에 해당하는 환경변수를 찾은 뒤 해당 환경변수의 값을 리턴해 줍니다.
  • 매개변수
    • name
      찾고싶은 환경변수 명
  • 리턴 값
    name에 해당하는 환경변수의 값을 리턴합니다.
    만약 찾지 못 한다면 NULL을 리턴합니다.

제어 관련

ioctl

  • 함수 원형
#include <sys/ioctl.h>

int ioctl(int fd, unsigned long request, ...);
  • 용도
    하드웨어의 제어나 정보를 얻기위해서 사용됩니다.
    read(), write()와 같은 동작을 할 수도 있고, SPI 통신 속도를 조절하는 등의 작업도 가능합니다.
  • 매개변수
    • fd
      open한 디바이스 드라이버의 fd값
    • request
      디바이스에 전달할 값
    • 그 다음
      보통 디바이스에 전달할 정보의 구조체 포인터로 사용하기도 하고 정수를 사용하기도 합니다. 어떤 명령을 할 지에 따라 사용할지 하지 않을 지 결정합니다.
  • 리턴 값
    성공 시 0, 실패 시 -1이 리턴되고 errno가 설정됩니다.
  • 에러코드
    참고 : ioctl(2) — Linux manual page

0개의 댓글