vendelin
vendelin

Reputation: 177

golang reading long text from stdin

I want to read a long text from os.Stdin, but I can't make it happen. Already read everything in the subject, tried codes that supposed to work. Every method cuts after 4096 characters, no matter what.

Eg. here's a working example. After the first run of the loop, it reads the first 4096 characters, and then waits for more processing each enter, until I end it with an EOF (Ctrl+D). Same thing for fmt.Scan, bufio.NewScanner, bufio ReadLine, ioutil.ReadAll. If I save it to a file, and read it, it works as expected. From stdin it doesn't.

I'm on Arch Linux, 32 bit, Go 1.7, tested in mate-terminal 1.14, tty 8.25, same thing in both of them. And the same thing happens on the hackerrank.com page, I don't know what technology they're using.

Please help!

EDIT:

My input is just a little bit longer than 4096 characters. I checked out the link that Amd shared, and I got the following: my input is only one line containing space separated integers. When I changed the spaces to newlines, it worked. But since the excercise format on hackerrate uses long space-separated lines, the problem is still up, with a refinement.

Upvotes: 4

Views: 1492

Answers (1)

vendelin
vendelin

Reputation: 177

I was able to solve this thanks to Ian Lance Taylor: https://groups.google.com/forum/#!topic/golang-nuts/ndh-1wdsWYs

So the 4096 characters is the limit of my system through N_TTY_BUF_SIZE kernel parameter. The same thing worked with cat and Python as well.

Anyway, on hackerrank.com I was able to solve the same exercise in Python, so I guess they have a wrong configuration for Go, I already asked them to find it out.

Upvotes: 1

Related Questions