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 (
"fmt"
"os"
)
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)
fmt.Println("------------------------")
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)
fmt.Println("------------------------")
// get a file unix file descriptor
file, err := os.Open("file.data")
if err != nil {
fmt.Println(err)
os.Exit(1)
}
fileDescriptor := int(file.Fd()) // get the unix descriptor
fileDescriptorName := file.Name() // get the file name
file.Close()
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 :
https://golang.org/pkg/os/#File.Fd
https://socketloop.com/references/golang-os-file-fd-function-example
http://www.theunixschool.com/2010/08/unix-file-descriptors.html
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.
Advertisement
Tutorials
+5.2k Golang : Handling image beyond OpenCV video capture boundary
+19.1k Golang : Underscore or snake_case to camel case example
+7k Prevent Write failed: Broken pipe problem during ssh session with screen command
+11.2k Golang : Remove or trim extra comma from CSV
+8.5k Golang : interface - when and where to use examples
+10.7k Golang : Determine if time variables have same calendar day
+16k Golang : Clone with pointer and modify value
+6.8k Golang : get the current working directory of a running program
+10.2k Golang : flag provided but not defined error
+18k Golang : Convert seconds to human readable time format example
+17.8k Golang : How to get own program name during runtime ?
+6k Golang : Squaring elements in array