API:POSIX

구차니의 잡동사니 위키
이동: 둘러보기, 찾기

목차

va_arg

#include <stdarg.h>

void va_start(va_list ap, last);
type va_arg(va_list ap, type);
void va_end(va_list ap);
void va_copy(va_list dest, va_list src);

getopt

#include <unistd.h>
int getopt(int argc, char * const argv[], const char *optstring);

extern char *optarg;
extern int optind, opterr, optopt;

#include <getopt.h>
int getopt_long(int argc, char * const argv[], const char *optstring, const struct option *longopts, int *longindex);
int getopt_long_only(int argc, char * const argv[], const char *optstring, const struct option *longopts, int *longindex);

struct option {
    const char *name;
    int         has_arg;
    int        *flag;
    int         val;
}; 

--help(getopt_long) -h(getopt) 식으로 사용이 가능

"D:"는 D에는 인자가 있다는 의미

signal

#include <signal.h>

int sigemptyset(sigset_t *set);
int sigfillset(sigset_t *set);
int sigaddset(sigset_t *set, int signum);
int sigdelset(sigset_t *set, int signum);
int sigismember(const sigset_t *set, int signum);
int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);
int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);

struct sigaction {
    void     (*sa_handler)(int);
    void     (*sa_sigaction)(int, siginfo_t *, void *);
    sigset_t   sa_mask;
    int        sa_flags;
    void     (*sa_restorer)(void);
};

signum

  • SIGTERM
  • SIGINT
  • SIGHUP
  • SIGFPE


select

뮤텍스(mutex)

  • 하나의 자원을 잠그는데 사용(카운트 하는 변수라던가)
  • binary semaphore와 유사
  • 값을 확인하고 lock 하는 행위는 atomic operation으로 처리
  • 소유권으로 인해 lock한 task만 unlock 가능
#include <pthread.h>

int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr);
int pthread_mutex_destroy(pthread_mutex_t *mutex);

int pthread_mutex_lock(pthread_mutex_t *mutex);
int pthread_mutex_trylock(pthread_mutex_t *mutex);
int pthread_mutex_unlock(pthread_mutex_t *mutex); 

pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;

세마포어(semaphore)

  • 여러개의 자원이 있는 경우 사용(pool로 구성된 자원에 사용)
  • 소유권이 없어 관련이 없는 쓰레드나 프로세스도 lock/unlock 가능
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>

int semget(key_t key, int nsems, int semflg);
int semctl(int semid, int semnum, int cmd, ...);
int semop(int semid, struct sembuf *sops, unsigned nsops);
struct sembuf
{
     unsigned short sem_num;  /* semaphore number */
     short          sem_op;   /* semaphore operation */
     short          sem_flg;  /* operation flags */
};
개인 도구
이름공간

변수
행위
둘러보기
도구모음