stderr 및 stdout을 동일한 파일로 리디렉션하는 방법

디마

stderr과 stdout을 모두 "log.out"이라는 파일로 인쇄하는 작업이 있습니다. 코드 줄을 삭제할 수는 없습니다. 코드 줄을 추가하기 만하면됩니다. stdout 부분은 쉬웠고 방금 close (1)를 추가했습니다. 이제 작동 중입니다.하지만 이미 몇 시간 동안 방법을 배우려고 노력했습니다. 전체 dup / dup1 / dup2 기술을 사용하지만 인터넷에서 주제에 대해 많이 읽은 후에도 작동하도록 만들 수 없습니다. 누군가가 내가 그것을 작동시키기 위해 추가해야 할 코드 줄을 보여주고 그것이 어떻게 작동하는지 설명한다면 정말 좋을 것입니다. 감사!

#include<stdio.h>
#include<stdlib.h>
#include <unistd.h>         // for fork, sleep etc.
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/stat.h> 
#include <fcntl.h>   

void fork_son(char*, int);
void do_son();
int open_file(char*);

int
main()
{
    fork_son("1st", 0);
    fork_son("2nd", 1);
    exit(0);
}

void fork_son(char* which, int need_file)
{
    int pid;
    int status;
    if (need_file)
    {
                close(1); //close stdout

        open_file("log.out");
    }
    // close and open files before forking

    pid = fork();
    if (pid <0) 
    {
        fprintf(stderr,"process %d, Fork Failed... Exiting\n", getpid());
        exit(1);
    }
    if (pid == 0)
        do_son(which);
    else
    {
        printf("waiting for %s son...", which);
        wait(&status);
        printf("%s son exited!\n", which);
    }
    return;
}   

void do_son(char* which) 
{
    fprintf(stdout,"Hello from %s son!\n", which);
    fprintf(stderr,"%s son: I'm going to exit\n", which);
    exit(0);
}   

int open_file(char* name)
{
    int fd;
    fd = open(name, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR);
    // check if open succeeded
    if (fd <0) 
    {
        fprintf(stderr, "ERROR: open \"%s\" failed (%d). Exiting\n", name, fd);
        exit(2);
    }
    // if (fd != 1) 
    // {
        // fprintf(stderr,"ERROR: open \"%s\" - fd is %d (expected 1). Exiting\n", name, fd);
        // exit(3);
    // }
    printf("opened file %s, file descriptor is: %d\n",name, fd);
    return(fd);
}

토니 태 너스

open이 작동하는 방식은 파일 설명자 테이블에서 무료 항목을 검색합니다. 0, 1, 2가 예약되어 엔트리 경우 stdin, stdout그리고 stderr각각.

stdin  - 0
stdout - 1
stderr - 2

당신은 재 지정하려면 stdoutstderrlog.out단순히 다음을 수행 할 수 당신 :

#include <stdio.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>

int main()
{
    int fd = - 1;
    fd = open("log.out", O_RDWR | O_CREAT); 

    dup2(fd, 1); // redirects stdout to log.out
    dup2(fd, 2); // redirects stderr to log.out

    /* Print to stderr and to stdout */
    fprintf(stdout, "%s", "Hello world\n");     
    fprintf(stderr, "%s", "Stack overflow!\n");
    return 0;
}

순서에 관심이 있다면 stdout을 파일로 리디렉션하면 줄 바꿈에서 버퍼를 플러시하지 않으므로 fflush 호출은 fprintf를 따라야합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

stdout 및 stderr을 파일로, stderr을 stdout으로 리디렉션

분류에서Dev

stdout 및 stderr를 파일로 리디렉션하는 POSIX 호환 방법

분류에서Dev

STDERR을 파일과 콘솔로 리디렉션하고 STDOUT을 파일로만 리디렉션하는 방법

분류에서Dev

stderr 및 stdout의 일부를 / dev / null로 리디렉션하는 방법

분류에서Dev

stderr를 파일로 리디렉션하고 일부 에코 (stdout 아님)를 동일한 파일로 리디렉션하는 방법

분류에서Dev

stdout을 파일로 리디렉션하고 stdout + stderr을 다른 파일로 리디렉션하는 방법은 무엇입니까?

분류에서Dev

stderr 및 stdout을 다른 파일로 리디렉션하고 터미널에 표시하는 방법은 무엇입니까?

분류에서Dev

stderr 및 stdout을 다른 파일로 리디렉션하고 터미널에 표시하는 방법은 무엇입니까?

분류에서Dev

stdout 및 stderr을 파일 설명자 복사본없이 동일한 파일로 리디렉션하는 것이 안전합니까?

분류에서Dev

stdout 및 stderr을 파일 설명자 복사본없이 동일한 파일로 리디렉션하는 것이 안전합니까?

분류에서Dev

stdout 및 stderr를 파일로 리디렉션하고 stderr를 콘솔에 표시하는 방법은 무엇입니까?

분류에서Dev

스크립트 stderr 및 stdout을 파일로 리디렉션하지만 stdout도 tty로 유지합니까?

분류에서Dev

stdout을 stderr로 리디렉션하는 방법

분류에서Dev

stdout 및 stderr를 다른 파일로 리디렉션

분류에서Dev

systemd : stdout을 로그 파일로 리디렉션하는 방법

분류에서Dev

bash에서 stdin과 stdout 및 stderr을 동시에 리디렉션하는 방법은 무엇입니까?

분류에서Dev

stderr을 stdout으로 리디렉션 한 다음 파이프 (apt-cache)하는 방법

분류에서Dev

STDOUT 및 STDERR 리디렉션을 동적으로 변경

분류에서Dev

시스템 명령을 사용하여 stdout 및 stderr 출력을 파일로 리디렉션하는 것이 Perl에서 작동하지 않습니다.

분류에서Dev

Windows 배관시 STDERR 및 STDOUT을 동일한 프로그램으로 리디렉션

분류에서Dev

tailf 및 grep의 출력을 파일로 리디렉션하는 방법

분류에서Dev

stdout과 stderr을 bash 스크립트 내에서 파일로 리디렉션하는 방법은 무엇입니까?

분류에서Dev

버퍼없이 stderr을 파일로 리디렉션하는 방법은 무엇입니까?

분류에서Dev

Laravel artisan queue : 작업이 stderr / stdout을 파일로 리디렉션

분류에서Dev

stdout 및 / 또는 stderr을 변수의 경로로 리디렉션

분류에서Dev

Cron은 stdout 및 stderr를 다른 파일로 리디렉션합니다.

분류에서Dev

bash stdout + stderr를 한 파일로, stderr를 다른 파일로 리디렉션

분류에서Dev

stdout과 stderr을 함께 리디렉션 VS stdout을 리디렉션 한 다음 stderr을 stdout의 파일로 리디렉션

분류에서Dev

Linux : stdout 및 stderr를 로거로 리디렉션하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    stdout 및 stderr을 파일로, stderr을 stdout으로 리디렉션

  2. 2

    stdout 및 stderr를 파일로 리디렉션하는 POSIX 호환 방법

  3. 3

    STDERR을 파일과 콘솔로 리디렉션하고 STDOUT을 파일로만 리디렉션하는 방법

  4. 4

    stderr 및 stdout의 일부를 / dev / null로 리디렉션하는 방법

  5. 5

    stderr를 파일로 리디렉션하고 일부 에코 (stdout 아님)를 동일한 파일로 리디렉션하는 방법

  6. 6

    stdout을 파일로 리디렉션하고 stdout + stderr을 다른 파일로 리디렉션하는 방법은 무엇입니까?

  7. 7

    stderr 및 stdout을 다른 파일로 리디렉션하고 터미널에 표시하는 방법은 무엇입니까?

  8. 8

    stderr 및 stdout을 다른 파일로 리디렉션하고 터미널에 표시하는 방법은 무엇입니까?

  9. 9

    stdout 및 stderr을 파일 설명자 복사본없이 동일한 파일로 리디렉션하는 것이 안전합니까?

  10. 10

    stdout 및 stderr을 파일 설명자 복사본없이 동일한 파일로 리디렉션하는 것이 안전합니까?

  11. 11

    stdout 및 stderr를 파일로 리디렉션하고 stderr를 콘솔에 표시하는 방법은 무엇입니까?

  12. 12

    스크립트 stderr 및 stdout을 파일로 리디렉션하지만 stdout도 tty로 유지합니까?

  13. 13

    stdout을 stderr로 리디렉션하는 방법

  14. 14

    stdout 및 stderr를 다른 파일로 리디렉션

  15. 15

    systemd : stdout을 로그 파일로 리디렉션하는 방법

  16. 16

    bash에서 stdin과 stdout 및 stderr을 동시에 리디렉션하는 방법은 무엇입니까?

  17. 17

    stderr을 stdout으로 리디렉션 한 다음 파이프 (apt-cache)하는 방법

  18. 18

    STDOUT 및 STDERR 리디렉션을 동적으로 변경

  19. 19

    시스템 명령을 사용하여 stdout 및 stderr 출력을 파일로 리디렉션하는 것이 Perl에서 작동하지 않습니다.

  20. 20

    Windows 배관시 STDERR 및 STDOUT을 동일한 프로그램으로 리디렉션

  21. 21

    tailf 및 grep의 출력을 파일로 리디렉션하는 방법

  22. 22

    stdout과 stderr을 bash 스크립트 내에서 파일로 리디렉션하는 방법은 무엇입니까?

  23. 23

    버퍼없이 stderr을 파일로 리디렉션하는 방법은 무엇입니까?

  24. 24

    Laravel artisan queue : 작업이 stderr / stdout을 파일로 리디렉션

  25. 25

    stdout 및 / 또는 stderr을 변수의 경로로 리디렉션

  26. 26

    Cron은 stdout 및 stderr를 다른 파일로 리디렉션합니다.

  27. 27

    bash stdout + stderr를 한 파일로, stderr를 다른 파일로 리디렉션

  28. 28

    stdout과 stderr을 함께 리디렉션 VS stdout을 리디렉션 한 다음 stderr을 stdout의 파일로 리디렉션

  29. 29

    Linux : stdout 및 stderr를 로거로 리디렉션하는 방법은 무엇입니까?

뜨겁다태그

보관