diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e660fd9 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +bin/ diff --git a/Makefile b/Makefile index aff5fa1..0df7ee2 100644 --- a/Makefile +++ b/Makefile @@ -13,70 +13,113 @@ RTFLAGS=-lrt BIN=./bin SOURCE=./src -SOURCES_C=alarm.c alarm_cond.c alarm_fork.c alarm_mutex.c \ - alarm_thread.c atfork.c backoff.c \ - barrier_main.c cancel.c cancel_async.c cancel_cleanup\ - cancel_disable.c cancel_subcontract.c cond.c cond_attr.c \ - crew.c cond_dynamic.c cond_static.c flock.c getlogin.c hello.c \ - inertia.c lifecycle.c mutex_attr.c \ - mutex_dynamic.c mutex_static.c once.c pipe.c putchar.c \ - rwlock_main.c rwlock_try_main.c \ - sched_attr.c sched_thread.c semaphore_signal.c \ - semaphore_wait.c server.c sigev_thread.c \ - sigwait.c susp.c thread.c \ - thread_attr.c thread_error.c trylock.c tsd_destructor.c \ - tsd_once.c workq_main.c +INC=-I$(SOURCE) + +SOURCES_C=\ +ch01/alarm.c \ +ch01/alarm_fork.c \ +ch01/alarm_thread.c \ +ch01/thread_error.c \ +ch02/hello.c \ +ch02/thread.c \ +ch02/lifecycle.c \ +ch03/alarm_cond.c \ +ch03/alarm_mutex.c \ +ch03/backoff.c \ +ch03/cond_dynamic.c \ +ch03/cond_static.c \ +ch03/cond.c \ +ch03/mutex_dynamic.c \ +ch03/mutex_static.c \ +ch03/trylock.c \ +ch04/crew.c \ +ch04/pipe.c \ +ch04/server.c \ +ch05/cancel_async.c \ +ch05/cancel_cleanup.c \ +ch05/cancel_disable.c \ +ch05/cancel_subcontract.c \ +ch05/cancel.c \ +ch05/cond_attr.c \ +ch05/mutex_attr.c \ +ch05/once.c \ +ch05/sched_attr.c \ +ch05/sched_thread.c \ +ch05/thread_attr.c \ +ch05/tsd_destructor.c \ +ch05/tsd_once.c \ +ch06/atfork.c \ +ch06/flock.c \ +ch06/getlogin.c \ +ch06/putchar.c \ +ch06/semaphore_signal.c \ +ch06/semaphore_wait.c \ +ch06/sigev_thread.c \ +ch06/sigwait.c \ +ch06/susp.c \ +ch07/barrier_main.c \ +ch07/rwlock_main.c \ +ch07/rwlock_try_main.c \ +ch07/workq_main.c \ +ch08/inertia.c NAMES_C=$(SOURCES_C:.c=) -PROGRAMS_C=$(addprefix $(BIN)/c_, $(NAMES_C)) +PROGRAMS_C=$(addprefix $(BIN)/, $(NAMES_C)) -SOURCES_CXX=alarm_mutex.cpp pipe.cpp +SOURCES_CXX=\ +ch03/alarm_mutex_cpp.cpp \ +ch04/pipe_cpp.cpp NAMES_CXX=$(SOURCES_CXX:.cpp=) -PROGRAMS_CXX=$(addprefix $(BIN)/cpp_, $(NAMES_CXX)) +PROGRAMS_CXX=$(addprefix $(BIN)/, $(NAMES_CXX)) -all: ${PROGRAMS_C} ${PROGRAMS_CXX} +all: dirs ${PROGRAMS_C} ${PROGRAMS_CXX} -$(BIN)/c_%: $(SOURCE)/%.c +dirs: + mkdir -p $(BIN) + mkdir -p $(BIN)/ch01 $(BIN)/ch02 $(BIN)/ch03 $(BIN)/ch04 $(BIN)/ch05 + mkdir -p $(BIN)/ch06 $(BIN)/ch07 $(BIN)/ch08 + +$(BIN)/%: $(SOURCE)/%.c $(CC) $(INC) $< $(CFLAGS) -o $@ $(LIBS) -$(BIN)/c_alarm_mutex: $(SOURCE)/alarm_mutex.c +$(BIN)/ch03/alarm_mutex: $(SOURCE)/ch03/alarm_mutex.c $(CC) $(INC) $< $(CFLAGS) ${RTFLAGS} -o $@ $(LIBS) -$(BIN)/c_backoff: $(SOURCE)/backoff.c +$(BIN)/ch03/backoff: $(SOURCE)/ch03/backoff.c $(CC) $(INC) $< $(CFLAGS) ${RTFLAGS} -o $@ $(LIBS) -$(BIN)/c_sched_attr: $(SOURCE)/sched_attr.c +$(BIN)/ch05/sched_attr: $(SOURCE)/ch05/sched_attr.c $(CC) $(INC) $< $(CFLAGS) ${RTFLAGS} -o $@ $(LIBS) -$(BIN)/c_sched_thread: $(SOURCE)/sched_thread.c +$(BIN)/ch05/sched_thread: $(SOURCE)/ch05/sched_thread.c $(CC) $(INC) $< $(CFLAGS) ${RTFLAGS} -o $@ $(LIBS) -$(BIN)/c_semaphore_signal: $(SOURCE)/semaphore_signal.c +$(BIN)/ch06/semaphore_signal: $(SOURCE)/ch06/semaphore_signal.c $(CC) $(INC) $< $(CFLAGS) ${RTFLAGS} -o $@ $(LIBS) -$(BIN)/c_semaphore_wait: $(SOURCE)/semaphore_wait.c +$(BIN)/ch06/semaphore_wait: $(SOURCE)/ch06/semaphore_wait.c $(CC) $(INC) $< $(CFLAGS) ${RTFLAGS} -o $@ $(LIBS) -$(BIN)/c_sigev_thread: $(SOURCE)/sigev_thread.c +$(BIN)/ch06/sigev_thread: $(SOURCE)/ch06/sigev_thread.c $(CC) $(INC) $< $(CFLAGS) ${RTFLAGS} -o $@ $(LIBS) -$(BIN)/c_susp: - ${CC} ${CFLAGS} ${RTFLAGS} ${LDFLAGS} -o $@ $(SOURCE)/susp.c +$(BIN)/ch06/susp: $(SOURCE)/ch06/susp.c + $(CC) $(INC) $< $(CFLAGS) ${RTFLAGS} -o $@ $(LIBS) -$(BIN)/c_rwlock_main: $(SOURCE)/rwlock.c $(SOURCE)/rwlock.h $(SOURCE)/rwlock_main.c - ${CC} ${CFLAGS} ${LDFLAGS} -o $@ $(SOURCE)/rwlock_main.c $(SOURCE)/rwlock.c +$(BIN)/ch07/rwlock_main: $(SOURCE)/ch07/rwlock.c $(SOURCE)/ch07/rwlock.h $(SOURCE)/ch07/rwlock_main.c + ${CC} $(INC) ${CFLAGS} ${LDFLAGS} -o $@ $(SOURCE)/ch07/rwlock_main.c $(SOURCE)/ch07/rwlock.c -$(BIN)/c_rwlock_try_main: $(SOURCE)/rwlock.h $(SOURCE)/rwlock.c $(SOURCE)/rwlock_try_main.c - ${CC} ${CFLAGS} ${LDFLAGS} -o $@ $(SOURCE)/rwlock_try_main.c $(SOURCE)/rwlock.c +$(BIN)/ch07/rwlock_try_main: $(SOURCE)/ch07/rwlock.h $(SOURCE)/ch07/rwlock.c $(SOURCE)/ch07/rwlock_try_main.c + ${CC} $(INC) ${CFLAGS} ${LDFLAGS} -o $@ $(SOURCE)/ch07/rwlock_try_main.c $(SOURCE)/ch07/rwlock.c -$(BIN)/c_barrier_main: $(SOURCE)/barrier.h $(SOURCE)/barrier.c $(SOURCE)/barrier_main.c - ${CC} ${CFLAGS} ${LDFLAGS} -o $@ $(SOURCE)/barrier_main.c $(SOURCE)/barrier.c +$(BIN)/ch07/barrier_main: $(SOURCE)/ch07/barrier.h $(SOURCE)/ch07/barrier.c $(SOURCE)/ch07/barrier_main.c + ${CC} $(INC) ${CFLAGS} ${LDFLAGS} -o $@ $(SOURCE)/ch07/barrier_main.c $(SOURCE)/ch07/barrier.c -$(BIN)/c_workq_main: $(SOURCE)/workq.h $(SOURCE)/workq.c $(SOURCE)/workq_main.c - ${CC} ${CFLAGS} ${RTFLAGS} ${LDFLAGS} -o $@ $(SOURCE)/workq_main.c $(SOURCE)/workq.c +$(BIN)/ch07/workq_main: $(SOURCE)/ch07/workq.h $(SOURCE)/ch07/workq.c $(SOURCE)/ch07/workq_main.c + ${CC} $(INC) ${CFLAGS} ${RTFLAGS} ${LDFLAGS} -o $@ $(SOURCE)/ch07/workq_main.c $(SOURCE)/ch07/workq.c -$(BIN)/cpp_%: $(SOURCE)/%.cpp +$(BIN)/%: $(SOURCE)/%.cpp $(CXX) $(INC) $< $(CFLAGS) -o $@ $(LIBS) clean: diff --git a/bin/.gitignore b/bin/.gitignore deleted file mode 100644 index f59ec20..0000000 --- a/bin/.gitignore +++ /dev/null @@ -1 +0,0 @@ -* \ No newline at end of file diff --git a/src/alarm.c b/src/ch01/alarm.c similarity index 100% rename from src/alarm.c rename to src/ch01/alarm.c diff --git a/src/alarm_fork.c b/src/ch01/alarm_fork.c similarity index 100% rename from src/alarm_fork.c rename to src/ch01/alarm_fork.c diff --git a/src/alarm_thread.c b/src/ch01/alarm_thread.c similarity index 100% rename from src/alarm_thread.c rename to src/ch01/alarm_thread.c diff --git a/src/thread_error.c b/src/ch01/thread_error.c similarity index 100% rename from src/thread_error.c rename to src/ch01/thread_error.c diff --git a/src/hello.c b/src/ch02/hello.c similarity index 100% rename from src/hello.c rename to src/ch02/hello.c diff --git a/src/lifecycle.c b/src/ch02/lifecycle.c similarity index 100% rename from src/lifecycle.c rename to src/ch02/lifecycle.c diff --git a/src/thread.c b/src/ch02/thread.c similarity index 100% rename from src/thread.c rename to src/ch02/thread.c diff --git a/src/alarm_cond.c b/src/ch03/alarm_cond.c similarity index 100% rename from src/alarm_cond.c rename to src/ch03/alarm_cond.c diff --git a/src/alarm_mutex.c b/src/ch03/alarm_mutex.c similarity index 100% rename from src/alarm_mutex.c rename to src/ch03/alarm_mutex.c diff --git a/src/alarm_mutex.cpp b/src/ch03/alarm_mutex_cpp.cpp similarity index 100% rename from src/alarm_mutex.cpp rename to src/ch03/alarm_mutex_cpp.cpp diff --git a/src/backoff.c b/src/ch03/backoff.c similarity index 100% rename from src/backoff.c rename to src/ch03/backoff.c diff --git a/src/cond.c b/src/ch03/cond.c similarity index 100% rename from src/cond.c rename to src/ch03/cond.c diff --git a/src/cond_dynamic.c b/src/ch03/cond_dynamic.c similarity index 100% rename from src/cond_dynamic.c rename to src/ch03/cond_dynamic.c diff --git a/src/cond_static.c b/src/ch03/cond_static.c similarity index 100% rename from src/cond_static.c rename to src/ch03/cond_static.c diff --git a/src/mutex_dynamic.c b/src/ch03/mutex_dynamic.c similarity index 100% rename from src/mutex_dynamic.c rename to src/ch03/mutex_dynamic.c diff --git a/src/mutex_static.c b/src/ch03/mutex_static.c similarity index 100% rename from src/mutex_static.c rename to src/ch03/mutex_static.c diff --git a/src/trylock.c b/src/ch03/trylock.c similarity index 100% rename from src/trylock.c rename to src/ch03/trylock.c diff --git a/src/crew.c b/src/ch04/crew.c similarity index 100% rename from src/crew.c rename to src/ch04/crew.c diff --git a/src/pipe.c b/src/ch04/pipe.c similarity index 100% rename from src/pipe.c rename to src/ch04/pipe.c diff --git a/src/pipe.cpp b/src/ch04/pipe_cpp.cpp similarity index 100% rename from src/pipe.cpp rename to src/ch04/pipe_cpp.cpp diff --git a/src/server.c b/src/ch04/server.c similarity index 100% rename from src/server.c rename to src/ch04/server.c diff --git a/src/cancel.c b/src/ch05/cancel.c similarity index 100% rename from src/cancel.c rename to src/ch05/cancel.c diff --git a/src/cancel_async.c b/src/ch05/cancel_async.c similarity index 100% rename from src/cancel_async.c rename to src/ch05/cancel_async.c diff --git a/src/cancel_cleanup.c b/src/ch05/cancel_cleanup.c similarity index 100% rename from src/cancel_cleanup.c rename to src/ch05/cancel_cleanup.c diff --git a/src/cancel_disable.c b/src/ch05/cancel_disable.c similarity index 100% rename from src/cancel_disable.c rename to src/ch05/cancel_disable.c diff --git a/src/cancel_subcontract.c b/src/ch05/cancel_subcontract.c similarity index 100% rename from src/cancel_subcontract.c rename to src/ch05/cancel_subcontract.c diff --git a/src/cond_attr.c b/src/ch05/cond_attr.c similarity index 100% rename from src/cond_attr.c rename to src/ch05/cond_attr.c diff --git a/src/mutex_attr.c b/src/ch05/mutex_attr.c similarity index 100% rename from src/mutex_attr.c rename to src/ch05/mutex_attr.c diff --git a/src/once.c b/src/ch05/once.c similarity index 100% rename from src/once.c rename to src/ch05/once.c diff --git a/src/sched_attr.c b/src/ch05/sched_attr.c similarity index 100% rename from src/sched_attr.c rename to src/ch05/sched_attr.c diff --git a/src/sched_thread.c b/src/ch05/sched_thread.c similarity index 100% rename from src/sched_thread.c rename to src/ch05/sched_thread.c diff --git a/src/thread_attr.c b/src/ch05/thread_attr.c similarity index 100% rename from src/thread_attr.c rename to src/ch05/thread_attr.c diff --git a/src/tsd_destructor.c b/src/ch05/tsd_destructor.c similarity index 100% rename from src/tsd_destructor.c rename to src/ch05/tsd_destructor.c diff --git a/src/tsd_once.c b/src/ch05/tsd_once.c similarity index 100% rename from src/tsd_once.c rename to src/ch05/tsd_once.c diff --git a/src/atfork.c b/src/ch06/atfork.c similarity index 100% rename from src/atfork.c rename to src/ch06/atfork.c diff --git a/src/flock.c b/src/ch06/flock.c similarity index 100% rename from src/flock.c rename to src/ch06/flock.c diff --git a/src/getlogin.c b/src/ch06/getlogin.c similarity index 100% rename from src/getlogin.c rename to src/ch06/getlogin.c diff --git a/src/putchar.c b/src/ch06/putchar.c similarity index 100% rename from src/putchar.c rename to src/ch06/putchar.c diff --git a/src/semaphore_signal.c b/src/ch06/semaphore_signal.c similarity index 100% rename from src/semaphore_signal.c rename to src/ch06/semaphore_signal.c diff --git a/src/semaphore_wait.c b/src/ch06/semaphore_wait.c similarity index 100% rename from src/semaphore_wait.c rename to src/ch06/semaphore_wait.c diff --git a/src/sigev_thread.c b/src/ch06/sigev_thread.c similarity index 100% rename from src/sigev_thread.c rename to src/ch06/sigev_thread.c diff --git a/src/sigwait.c b/src/ch06/sigwait.c similarity index 100% rename from src/sigwait.c rename to src/ch06/sigwait.c diff --git a/src/susp.c b/src/ch06/susp.c similarity index 100% rename from src/susp.c rename to src/ch06/susp.c diff --git a/src/barrier.c b/src/ch07/barrier.c similarity index 100% rename from src/barrier.c rename to src/ch07/barrier.c diff --git a/src/barrier.h b/src/ch07/barrier.h similarity index 100% rename from src/barrier.h rename to src/ch07/barrier.h diff --git a/src/barrier_main.c b/src/ch07/barrier_main.c similarity index 100% rename from src/barrier_main.c rename to src/ch07/barrier_main.c diff --git a/src/rwlock.c b/src/ch07/rwlock.c similarity index 100% rename from src/rwlock.c rename to src/ch07/rwlock.c diff --git a/src/rwlock.h b/src/ch07/rwlock.h similarity index 100% rename from src/rwlock.h rename to src/ch07/rwlock.h diff --git a/src/rwlock_main.c b/src/ch07/rwlock_main.c similarity index 100% rename from src/rwlock_main.c rename to src/ch07/rwlock_main.c diff --git a/src/rwlock_try_main.c b/src/ch07/rwlock_try_main.c similarity index 100% rename from src/rwlock_try_main.c rename to src/ch07/rwlock_try_main.c diff --git a/src/workq.c b/src/ch07/workq.c similarity index 100% rename from src/workq.c rename to src/ch07/workq.c diff --git a/src/workq.h b/src/ch07/workq.h similarity index 100% rename from src/workq.h rename to src/ch07/workq.h diff --git a/src/workq_main.c b/src/ch07/workq_main.c similarity index 100% rename from src/workq_main.c rename to src/ch07/workq_main.c diff --git a/src/inertia.c b/src/ch08/inertia.c similarity index 100% rename from src/inertia.c rename to src/ch08/inertia.c