github.com/keybase/client/go@v0.0.0-20240309051027-028f7c731f8b/kbfs/stderrutils/dup_stderr_nix.go (about)

     1  // Copyright 2017 Keybase, Inc. All rights reserved. Use of
     2  // this source code is governed by the included BSD license.
     3  
     4  //go:build linux || android || darwin || freebsd || openbsd
     5  // +build linux android darwin freebsd openbsd
     6  
     7  package stderrutils
     8  
     9  import (
    10  	"os"
    11  	"syscall"
    12  )
    13  
    14  // DupStderr duplicates stderr and return it as an *os.File. Use this to
    15  // preserve stderr before any redirection (e.g. from keybase/client/go/logger)
    16  // if needed.
    17  func DupStderr() (*os.File, error) {
    18  	dupStderrFd, err := syscall.Dup(2)
    19  	if err != nil {
    20  		return nil, err
    21  	}
    22  	stderrFile := os.NewFile(uintptr(dupStderrFd), "stderr")
    23  	return stderrFile, nil
    24  }