2014年9月2日火曜日

開発環境

初めてのPerl 第6版 (Randal L. Schwartz (著)、brian d foy (著)、Tom Phoenix (著)、近藤 嘉雪 (翻訳)、オライリージャパン)の16章(プロセス管理)の16.9(練習問題)4.をC言語で考えてみる。

その他参考書籍

16.9(練習問題)4.

コード(BBEdit, Emacs)

sample4.c

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>

void my_hup_handler(int sig)
{
  static int count = 0;
  count += 1;
  printf("SIGHUP %d\n", count);
}

void my_cont_handler(int sig)
{
  static int count = 0;
  count += 1;
  printf("SIGCONT %d\n", count);
}

void my_int_handler(int sig)
{
  puts("SIGINT");
  exit(0);
}

int catch_signal(int sig, void (*handler)(int))
{
  struct sigaction action;
  action.sa_handler = handler;
  sigemptyset(&action.sa_mask);
  action.sa_flags = 0;
  return sigaction (sig, &action, NULL);
}

int main(int argc, char *argv[])
{
  void (*handlers[])(int) = {my_hup_handler, my_cont_handler, my_int_handler};
  int signals[] = {SIGHUP, SIGCONT, SIGINT};
  
  for (int i = 0; i < 3; i++)
    catch_signal(signals[i], handlers[i]);

  while (1)
    ;

  return (0);
}

Makefile

CC=cc
CFLAGS=-g -Wall
SRC=sample4.c
OBJ=sample4.o

all: sample4

sample4: $(OBJ)
 $(CC) $(CFLAGS) $(OBJ) -o sample4

sample4.o: sample4.c
 $(CC) $(CFLAGS) -c sample4.c -o sample4.o

clear:
 rm -rf sample4 $(OBJ)

入出力結果(Terminal)

$ make
cc -g -Wall -c sample4.c -o sample4.o
cc -g -Wall sample4.o -o sample4
$ ./sample4 &
[1] 56679
$ kill -HUP 56679
$ SIGHUP 1

$ kill -HUP 56679
SIGHUP 2
$ kill -CONT 56679
SIGCONT 1
$ kill -HUP 56679
SIGHUP 3
$ kill -CONT 56679
$ SIGCONT 2

$ ps
  PID TTY           TIME CMD
56400 ttys001    0:00.13 /opt/local/bin/bash --noediting -i
56679 ttys001    0:42.85 ./sample4
$ kill -INT 56679
SIGINT
$ ps
  PID TTY           TIME CMD
56400 ttys001    0:00.13 /opt/local/bin/bash --noediting -i
[1]+  Done                    ./sample4
$ 

0 コメント:

コメントを投稿