Golang : How to get Unix file descriptor for console and file

A short tutorial showing you how to obtain the Unix file descriptor for terminal/console and file in Golang with the os package. Basically, there are 3 file descriptors under Unix/Linux environment :

  • 0 for input
  • 1 for output
  • 3 for file

and knowing this information can be helpful in situation when you want to test if a given variable is a file or console.

Here we go!

 package main

 import (

 func main() {

 // get console unix file descriptor
 outputFileDesc := int(os.Stdout.Fd())
 outputName := os.Stdout.Name()
 fmt.Println("Terminal or console output Unix file descriptor : ", outputFileDesc)
 fmt.Println("output Unix file descriptor name : ", outputName)


 inputFileDesc := int(os.Stdin.Fd())
 inputName := os.Stdin.Name()
 fmt.Println("Terminal or console input Unix file descriptor : ", inputFileDesc)
 fmt.Println("input Unix file descriptor name : ", inputName)

 // get a file unix file descriptor
 file, err := os.Open("file.data")

 if err != nil {

 fileDescriptor := int(file.Fd())  // get the unix descriptor
 fileDescriptorName := file.Name() // get the file name


 fmt.Printf("%s Unix file descriptor : %d \n", fileDescriptorName, fileDescriptor)


Output :

Terminal or console output Unix file descriptor : 1

output Unix file descriptor name : /dev/stdout


Terminal or console input Unix file descriptor : 0

input Unix file descriptor name : /dev/stdin


file.data Unix file descriptor : 3

Happy coding!

References :




By Adam Ng

IF you gain some knowledge or the information here solved your programming problem. Please consider donating to the less fortunate or some charities that you like. Apart from donation, planting trees, volunteering or reducing your carbon footprint will be great too.