Subj : Re: XP's "more.com" skips first lines of output -- a bigger problem To : All From : V@nguard.LH Date : Tue Jan 15 2019 11:06 am Path: eternal-september.org!mx02.eternal-september.org!feeder.eternal-september.org!f eeder.erje.net!1.eu.feeder.erje.net!fu-berlin.de!uni-berlin.de!individual.net!n ot-for-mail From: VanguardLH Newsgroups: microsoft.public.windowsxp.help_and_support Subject: Re: XP's "more.com" skips first lines of output -- a bigger problem Date: Fri, 15 Jan 2016 10:06:41 -0600 Organization: Usenet Elder Lines: 65 Sender: VanguardLH <> Message-ID: References: <56977375$0$23733$e4fe514c@news.xs4all.nl> <5698103a$0$23821$e4fe514c@news.xs4all.nl> <5698c5a2$0$23803$e4fe514c@news.xs4all.nl> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Trace: individual.net ltgLlBjwE/cPfufIfxAjXAsRomrjLuEhZ+EGam2gKvFN0rTARM Keywords: VanguardLH VLH811 Cancel-Lock: sha1:PuCXbZ50LNthw7UtYaxxRadfbho= User-Agent: 40tude_Dialog/2.0.15.41 Xref: mx02.eternal-september.org microsoft.public.windowsxp.help_and_support:31816 Piping uses a buffer to pipe data from stdout to stdin. Redirection uses a file pointer (not necessarily a file in the file system) to transfer data. With redirection using file pointers, the file has to get closed to reuse it in another redirection (except as noted when using >&1 to merge data streams by having the output from one handle write into to the input of another handle). So I have to wonder if the problem isn't with the program generating the stdout stream. stdin for more.com looks to be working because you tested with "... > file & more < file" and that works (all lines are captured). Not all programs work with pipes. Note: Although I've mentioned stdin, stdout, and stderr, cmd.exe actually permits up to 10 handles. 0 = stdin, 1 = stdout, 2 = stderr, and 3-9 are defined by the program and are specific to it. To specify which handle, put a number before the redirection character. No number defaults to 1 (stdout) for > and defaults to 0 (stdin) for <. You can specify a file or handle for the stream source. For example, "1<&2" redirects from handle 2 (stderr) into handle 1 (stdout) while "dir path > file 2>&1" sends the dir's stdout and stderr to the same file. See: http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/ redirection.mspx Piping uses a buffer while redirection uses file handles. I have read that using | is that a command can produce enough output to fill up the pipe's buffer which causes a block on the next program to read it. That is, for "programA | programB", programA might fill up the buffer and still be in write mode so programB cannot read the buffer. The size of the pipe's buffer differs with different operating systems. There are bunch of rules as to size and it can change within an OS. I read where Mac OS/X has a pipe buffer capacity of 16,384 bytes but will switch to 65,336 bytes (although since Linux 2.6.11 it defaults to 65.336) if a large write is made to the pipe, or switch to a single system page if too much memory is already used by the pipe. fcntl is called by a program to change the pipe's buffer size. win32api calls are used in Windows. So a program could adjust the size of the pipe. Alas, I don't know if a console-mode program can adjust the size of cmd.exe's piping buffer. As I recall, cmd.exe's pipe is only 512 bytes. Very small. And probably why piping is slow. So perhaps you are hitting against the pipe's max buffer size versus using redirection with file handles since files are rather indefinite in size (with restrictions within the OS and hardware). With the mode command, it looks like the args specify the buffer size. "mode con:cols=80 lines=25" only gives you a 2000 byte buffer. If instead you used "mode con:cols=132 lines=2500" then you would get a 322kB buffer (and use scrolling in the console window to get at scrolled off output - but then you are using more.com to paginate that output). I don't bother using MODE to define the buffer size for the console (cmd.exe). I might if I needed in in a script (.bat file). Instead I load the command shell and click on its control menu to select Properties where I set the buffer size (and window size) under the Layout tab. Because I don't want a huge window size (I set it at 132 x 50) which would end up with much of it being offscreen, I set a larger buffer size (132 x 5000) and use the vertical scroll bar to move up and down through the output. I could set width to 80 and use horizontal scrollbar to move left and right for output greater than 80 characters but the screen is usually wide enough that I can set width to 132 (few DOS-mode programs ever exceed that line length). So move away from using MODE to define some ancient 80x25 screen size (whether by using mode.com or setting properties of cmd.exe's window) and up the buffer size and use scroll bars. After all, you are using more.com to paginate, anyway, so scrolling or not shouldn't be a concern to you. --- Platinum Xpress/Win/WINServer v3.1 * Origin: Prison Board BBS Mesquite Tx //telnet.RDFIG.NET www. (1:124/5013) .