[phobos] Removing std.stdio.File.popen()
Sean Kelly
sean at invisibleduck.org
Wed Aug 18 08:16:00 PDT 2010
Or it updates the read offset when the buffer is adjusted.
On Aug 18, 2010, at 4:38 AM, Lars Tandle Kyllingstad wrote:
> On Wed, 2010-08-18 at 04:44 -0500, Andrei Alexandrescu wrote:
>> On 08/18/2010 03:10 AM, Lars Tandle Kyllingstad wrote:
>>> On Tue, 2010-08-17 at 22:03 -0500, Andrei Alexandrescu wrote:
>>>> I understand that, and the motivation has been thoroughly explained in
>>>> the Unix lore. My question is, why define a separate type? Wouldn't
>>>> creating a file and calling setbuf(null, 0) suffice?
>>>
>>>
>>> Well, for one thing, I didn't know about setbuf() until just now. :)
>>>
>>> I still think I prefer the UnbufferedFile solution, though. setbuf()
>>> should be called before anything is read or written to the stream. This
>>> means it will be up to the user to do so, and this is easily forgotten.
>>> Compare
>>>
>>> auto f = UnbufferedFile("myfile.txt");
>>> ...
>>> auto p = spawnProcess("myapp", f);
>>>
>>> to
>>>
>>> auto f = File("myfile.txt");
>>> setbuf(f.getFP(), null); // DON'T FORGET THIS!
>>> ...
>>> auto p = spawnProcess("myapp", f);
>>
>> spawnProcess could call setbuf itself and fail if that doesn't go through.
>
>
> On my computer, setvbuf() doesn't fail when you turn off the buffer
> after reading something. In particular, the following program runs
> fine:
>
> import core.stdc.stdio, std.string;
>
> void main(string[] args)
> {
> auto file = fopen(toStringz(args[1]), "r");
>
> auto data = new char[10];
> fread(data.ptr, 1, data.length, file);
>
> // This should fail, but doesn't:
> assert (setvbuf(file, null, _IONBF, 0) == 0);
>
> fclose(file);
> }
>
> This means that it either silently ignores the request to turn off
> buffering, or it ditches a whole lot of data. :(
>
> -Lars
>
> _______________________________________________
> phobos mailing list
> phobos at puremagic.com
> http://lists.puremagic.com/mailman/listinfo/phobos
More information about the phobos
mailing list