int fork()
int execlp(const char *file, const char *arg0, ... /*, (char *)0 */);
int dup2(int fildes, int fildes2);
int pipe(int fildes[2]);
int wait(int *stat_loc);
int open(const char *path, int oflag, ...);
int close(int fildes);

int pthread_create(pthread_t *restrict thread, pthread_attr_t *restrict attr, 
                   void *(*start_routine)(void *), void *restrict arg);

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

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

int select(int nfds, fd_set *restrict readfds, fd_set *restrict writefds,
           fd_set *restrict errorfds, struct timeval *restrict timeout);

void FD_CLR(fd, fd_set *fdset);
void FD_COPY(fd_set *fdset_orig, fd_set *fdset_copy);
int  FD_ISSET(fd, fd_set *fdset);
void FD_SET(fd, fd_set *fdset);
void FD_ZERO(fd_set *fdset);