10-21-2009
For line-based I/O, you want a maximum. Otherwise, when fed an endless line, your program will allocate endless amounts of memory. Make it a large maximum if you want, but give it some sort of maximum. Also note that while you can make your limit as large as you feasibly want, there are plenty of UNIX commandline tools, like standard sed and grep, that won't handle lines larger than 2048 bytes. Even things like uuencoding that translate raw binary into ASCII have measures to limit their line length because it's always in your best interest to keep line lengths reasonable.
Furthermore, reading more than one character at a time won't let you "unget" the extra data read beyond the end of line. You can unget one and only one character. So you have to read one-at-a-time if you want to keep all your data.
Also, your algorithm overcomplex, there's no need for a linked list or other data structure. You can resize already-allocated memory with realloc(). It's location may change, but already-defined data will stay defined, while the new area on the end will be undefined until you overwrite it.
I'd just use fgets() with a limit of a few kilobytes. If you really wanted to be sure, make the limit configurable with a commandline switch, just in case.
Last edited by Corona688; 10-21-2009 at 03:20 PM..
7 More Discussions You Might Find Interesting
1. Shell Programming and Scripting
All Expert,
I am using Sun OS 5.8 and Perl version 5 in One server and Perl 5.8 in another unix server.
I am able to read a file using fopen function of perl --file size having more then 3 GB of data.(In the machine where Perl 5.8 install)
But when i am running the same perl script --It... (1 Reply)
Discussion started by: jambesh
1 Replies
2. Shell Programming and Scripting
Hi,
I am a beginner in shell scripting. I have written the following script, which is supposed to process the while loop for each line in the sid_home.txt file. But I'm getting the 'end of file' unexpected for the last line. The file sid_home.txt gets generated as expected, but the script... (6 Replies)
Discussion started by: sagarparadkar
6 Replies
3. Shell Programming and Scripting
So, I want to read line-by-line a text file with unknown number of files....
So:
a=1
b=1
while ; do
b=`sed -n '$ap' test`
a=`expr $a + 1`
$here do something with b etc
done
the problem is that sed does not seem to recognise the $a, even when trying
sed -n ' $a p'
So, I cannot read... (3 Replies)
Discussion started by: hakermania
3 Replies
4. Shell Programming and Scripting
I need some help. I would like to read in a text file.
Take a variable such as ROW-D-01, compare it to what's in one line in the text file such as PROD/VM/ROW-D-01 and only input PROD/VM into a variable without the /ROW-D-01.
Is this possible? any help is appreciated. (2 Replies)
Discussion started by: xChristopher
2 Replies
5. Shell Programming and Scripting
Hi,
I want to read a live log file line by line and considering those line which start from time stamp;
Below code I am using, which read line but throws an exception when comparing line that does not contain error code
tail -F /logs/COMMON-ERROR.log | while read myline; do... (2 Replies)
Discussion started by: ketanraut
2 Replies
6. Programming
I need to copy a file (srcFile) to a new ubication (destFile). Then I calculate the size of the copy file using stat. The problem is that I always get a cero size value although the file has not cero size in the hard disk.
The source code that does this is :
PROGRAM 1:
char srcFile;... (4 Replies)
Discussion started by: clxspain
4 Replies
7. UNIX for Beginners Questions & Answers
Hi All,
i want to write a shell script read below file line by line and want to exclude the lines which contains empty value for MOUNTPOINT field.
i am using centos 7 Operating system.
want to read below file.
# cat /tmp/d5
NAME="/dev/sda" TYPE="disk" SIZE="60G" OWNER="root"... (4 Replies)
Discussion started by: balu1234
4 Replies
LEARN ABOUT ULTRIX
fwrite
fread(3s) fread(3s)
Name
fread, fwrite - buffered binary input/output
Syntax
#include <stdio.h>
size_t fread(ptr, size, nitems, stream)
void *ptr;
size_t size, nitems;
FILE *stream;
size_t fwrite(ptr, size, nitems, stream)
void *ptr;
size_t size, nitems;
FILE *stream;
Description
The function reads into a block beginning at ptr, nitems of data of the size size (usually sizeof *ptr) from the named input stream. It
returns the number of items actually read.
If stream is stdin and the standard output is line buffered, then any partial output line will be flushed before any call to to satisfy the
The function appends, at most, nitems of data of the size size (usually sizeof *ptr) beginning at ptr to the named output stream. It
returns the number of items actually written.
Return Values
The and functions return 0 upon end of file or error.
See Also
read(2), write(2), fopen(3s), getc(3s), gets(3s), printf(3s), putc(3s), puts(3s), scanf(3s)
fread(3s)