CnUnix

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ CnUnix ] in KIDS
글 쓴 이(By): HellCat ((void*)0)
날 짜 (Date): 1994년08월10일(수) 22시33분02초 KDT
제 목(Title): [R] tty



tty 를 setpgrp() 등으로 띠어 버렸을때
stdout 은 디폴트로 /dev/console 이 될꺼에요.

이건 제가 쓰는 프로그램의 일부인데....제 경우
콘솔로 보내지 않으려고 한거고..

또 제가 만든 프로그램이 계속해서 child process 를
fork() & exec() 해야 하기 땜에.... 어쨌던..자세한건
말씀드리기 곤란하고 꼬진 코딩이지만..참고가 되었으면 합니다.

    if ((pid = fork()) < 0)
      {
        perror("fork");
        exit(1);
      }
    if (pid > 0)
      {
        /* parent */
        exit(0);
      }
    if (setpgrp() == -1)
      {
        perror("setpgrp");
        exit(1);
      }
    sigset(SIGHUP, SIG_IGN);
    if ((child_pid = fork()) == -1)
      {
        perror("cannot fork second child");
        exit(1);
      }
    if (child_pid > 0)
      {
        /* first child */
        exit(0);
      }

    for (i = 0, nofile = getdtablesize(); i < nofile; i++)
      {
        close(i);
      }

    errno = 0;

    umask (002);

    if ((fd1 = open (NEWSTDOUT, (O_RDWR | O_CREAT | O_SYNC), 0660)) == -1)
      {
        perror("redirecting STDOUT for MASTER failed");
        exit(1);
      }
    if (dup2(fd1, 1) == -1)
      {
        perror("dup2 for STDOUT for MASTER failed");
        exit(1);
      }
    if ((fd2 = open (NEWSTDERR, (O_RDWR | O_CREAT | O_SYNC), 0660)) == -1)
      {
        perror("redirecting STDERR for MASTER failed");
        exit(1);
      }
    if (dup2 (fd2, 2) == -1)
      {
        perror("dup2 for STDERR for MASTER failed");
        exit(1);
      }
---
  if (t_snddis(KIDS[i].fd, (struct t_call *)NULL) == -1)
    { t_error("날 죽여라!!"); longjmp ((jmp_buf) HELL, -1); }
[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.