Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > gnu.bash.bug > #15018

Re: Reading from a file by using its FD returns its contents only once

Path csiph.com!3.us.feeder.erje.net!feeder.erje.net!news.linkpendium.com!news.linkpendium.com!panix!usenet.stanford.edu!not-for-mail
From Daniel Mills <danielmills1@gmail.com>
Newsgroups gnu.bash.bug
Subject Re: Reading from a file by using its FD returns its contents only once
Date Mon, 31 Dec 2018 12:23:03 -0500
Lines 86
Approved bug-bash@gnu.org
Message-ID <mailman.6628.1546277000.1284.bug-bash@gnu.org> (permalink)
References <CACosJgxBTuPp9KpUuT5nST9dB7uFqP2gJ31q76C8O9owRU7_iw@mail.gmail.com>
NNTP-Posting-Host lists.gnu.org
Mime-Version 1.0
Content-Type text/plain; charset="UTF-8"
X-Trace usenet.stanford.edu 1546277000 1566 208.118.235.17 (31 Dec 2018 17:23:20 GMT)
X-Complaints-To action@cs.stanford.edu
Cc bug-bash@gnu.org
To mike b <michallinuxstuff@gmail.com>
Envelope-to bug-bash@gnu.org
DKIM-Signature v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=TZijPxtvN14zaz0zn51LFqpYt+LvTdmmPf4o1xEj5h4=; b=iX0WoBx7H4tVZzXHRsvuqoSNkix6pS9fd3XflxyoY3qIq/zTi9kYdKgABevXiqb+oC 20PvsSdev5YD6CSDi7sjk18GoS08g8xWBbp/KK/KwYnWEl8hnkT0F39st836afFejkzJ 6DNtGrw4g8K4t4xNFMOMpzdgPz/1bayRcTD7/9xVbswsSst9NCmhrVwGuITMgIjp/ZfH QsIZTJjgSE0757S0JLvEee2aO8F4bWTYTpsdJiFkJqaxNz7S3BVbR5y/l88uetaDZKUm nzj5nuPPhwd/D9R0gLexVzDVLtfildRtBu23EVmK2udJbMOjcJ0VXZc6qp0HspEewGfX iSsA==
X-Google-DKIM-Signature v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=TZijPxtvN14zaz0zn51LFqpYt+LvTdmmPf4o1xEj5h4=; b=HLfOlGGx9YV8vwZcAphi20SxNnvnVIyTY0eFBQSFAebWq76aQXzBaBN8/USh7gD735 o7xaqRs+BPTchUbfSTj2xtlsnQ3C5+FeQTspGKc5OsUqDDuC5aPtucfhfUw4wIuMArza C3sN29bhXwaYMGVABKDs2PagG8evZ0d3HZrsLkCkxjxKDfx/EbdeSoddTz1NxPGrNQpG xevXd71X02quRrG1/UFgEuxtklOakcvsckW/15EvBHR0qRmdDhtk1FuHglDwak+el28E 8ceBrxirE2JBs4byuW0yWHtG+aOQHNOAci7QO9Lp6wirmDPqAYloe/EmUvne4p1PNoxu /R+A==
X-Gm-Message-State AJcUukdajeHFgFOw3hrmqnNiX9wrNDgCh4GkF6diuN+y9+dL9xa834uR HiY8+gG6jQajUBJ9bldbtBcGLaANmb0aSVwf484=
X-Google-Smtp-Source ALg8bN4rkvZeDczf+njLxgFjP1u0chZjqT12jC3XkbdusqaiKaGaYrUxKtdRc15JM9qBk6K2Wzn33/AD4ucD4j/SWWM=
X-Received by 2002:a6b:d618:: with SMTP id w24mr28220694ioa.24.1546276996201; Mon, 31 Dec 2018 09:23:16 -0800 (PST)
In-Reply-To <CACosJgxBTuPp9KpUuT5nST9dB7uFqP2gJ31q76C8O9owRU7_iw@mail.gmail.com>
X-detected-operating-system by eggs.gnu.org: Genre and OS details not recognized.
X-Received-From 2607:f8b0:4864:20::d42
X-Content-Filtered-By Mailman/MimeDel 2.1.21
X-BeenThere bug-bash@gnu.org
X-Mailman-Version 2.1.21
Precedence list
List-Id Bug reports for the GNU Bourne Again SHell <bug-bash.gnu.org>
List-Unsubscribe <https://lists.gnu.org/mailman/options/bug-bash>, <mailto:bug-bash-request@gnu.org?subject=unsubscribe>
List-Archive <http://lists.gnu.org/archive/html/bug-bash/>
List-Post <mailto:bug-bash@gnu.org>
List-Help <mailto:bug-bash-request@gnu.org?subject=help>
List-Subscribe <https://lists.gnu.org/mailman/listinfo/bug-bash>, <mailto:bug-bash-request@gnu.org?subject=subscribe>
Xref csiph.com gnu.bash.bug:15018

Show key headers only | View raw


On Sun, Dec 30, 2018 at 8:37 PM mike b <michallinuxstuff@gmail.com> wrote:

> Configuration Information:
> Machine: x86_64
> OS: linux-gnu
> Compiler: gcc
> Compilation CFLAGS:  -DPROGRAM='bash' -DCONF_HOSTTYPE='x86_64'
> -DCONF_OSTYPE='linux-gnu' -DCONF_MACHTYPE='x86_64-pc-linux-gnu'
> -DCONF_VENDOR='pc' -DLOCALEDIR='/usr/share/locale' -DPACKAGE='bash' -DSHELL
> -DHAVE_CONFIG_H   -I.  -I../. -I.././include -I.././lib  -Wdate-time
> -D_FORTIFY_SOURCE=2 -g -O2 -fdebug-prefix-map=/build/bash-7fckc0/bash-4.4=.
> -fstack-protector-strong -Wformat -Werror=format-security -Wall -no-pie
> -Wno-parentheses -Wno-format-security
> uname output: Linux debian9 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2
> (2018-10-27) x86_64 GNU/Linux
> Machine Type: x86_64-pc-linux-gnu
>
> Bash Version: 4.4
> Patch Level: 12
> Release Status: release
>
> I am not quite sure if this is a bug, but here's what I find as a bit odd
> behavior:
>
> # modprobe zram num_devices=0
> # exec {add}</sys/class/zram-control/hot_add
> # read -r id <&"$add"; echo "$id"
> 0
> # read -r id <&"$add"; echo "$id" # <- $id ends up empty, no data is read
>
> # read -r id </sys/class/zram-control/hot_add; echo "$id"
> 1
> # read -r id </sys/class/zram-control/hot_add; echo "$id"
> 2
> # readlink -f "/proc/$$/fd/$add"
> /sys/class/zram-control/hot_add
>
> The above sysfs interface is used for creating a zram device by performing
> a read on the hot_add file. The value that should be returned is the id of
> the newly created device. In first instance file is opened by dynamically
> allocating the fd to use "$add" (the fd) across reads instead of
> referencing the file directly. But from the above example you can see that
> $id is assigned an actual value only on first read. On every next one, $id
> would become empty - when using $add, that is. However, when file is read
> in a standard way, by using it directly, everything works as it should.
>
> The above is just an example. Doing reads on any other regular file like
> this yields same behavior:
> # echo bla >./t
> # exec 10<./t
> # read -r <&10
> # echo $REPLY
> bla
> # read -r <&10
> # echo $REPLY
>
> #
> Playing with something like:
> # zram=/sys/class/zram/control/hot_add
> # c=0; while  ((++c <= 3)); do read -r; echo "${REPLY:-NULL}"; done
> <"$zram"
> 0
> NULL
> NULL
> #
> also gets same results. In contrast to:
> # c=0; while (( ++c <= 3 )); do read -r; echo "out: ${REPLY:-NULL}"; done
> foo
> out: foo
> foo
> out: foo
> foo
> out: foo
> #
> which keeps reading from default stdin (terminal in this case) without any
> hiccups (as expected).
>
> So, considering all the above, any hints on why subsequent reads in these
> scenarios don't get any data from a file would be really appreciated. :)
>
> Same behavior is seen in 4.3.30 and 5.0 versions.
>

Redirections treat all files as streams, it won't seek back to the
beginning once you hit the end of the file. You would need to close and
re-open it

Back to gnu.bash.bug | Previous | Next | Find similar | Unroll thread


Thread

Re: Reading from a file by using its FD returns its contents only once Daniel Mills <danielmills1@gmail.com> - 2018-12-31 12:23 -0500

csiph-web