EOF not found


 
Thread Tools Search this Thread
Top Forums Programming EOF not found
# 1  
Old 11-11-2008
EOF not found

Hello,

I"m using the following c++ program on a Linux Redhat System, where it works fine.
But as soon as I move on a SunOS there will be no end of reading?

Code:
#include <fstream> 
#include <iostream>

ifstream     file("test"); 
string         buffer; 
int         i=0; 
      
 if (file.is_open()) { 
   while (!file.eof())  
   { 
     cout <<  "EOF: " << file.eof() << endl; 
          
         i++; 
        try {
         getline(file, buffer);        
          cout << i << ": "<< buffer << endl; 
         }  catch (exception& ex) { 
         cout << "ERROR READING!" <<endl;  
     }   
   } 
   file.close(); 
 }

I really don't know what to do and where it comes from?
Has anyone an idea?

Thanks Tim
# 2  
Old 11-14-2008
What exactly does it do on fedora? Does it output "ERROR READING!" on fedora or not?

I can see two possible ways this program could operate depending on how its iostream works underneath. If iostream can detect EOF before a read actually fails, then it will break the while loop before any message is printed. But if it can't detect EOF until a read actually fails, then it will throw the exception and print "ERROR READING!". I'm not positive but I believe both behaviors are valid ways for iostream to work, particularly since it's hard to detect EOF on things like sockets and pipes until a read actually fails.
# 3  
Old 11-16-2008
A big thank you for your reply - I'm really stuck.
So there is no error message at all:
if there a 5 lines in a textfile for example, it keeps printing out:
Code:
6: 
7:
8:
...

and so on. So the buffer is empty, but no exception is thrown, but if I put getline(file, buffer); in the while loop, like this:
Code:
while (getline(file, buffer))

- it will return false, thus it ends when there are no more lines available.

But nevertheless I don't know why EOF fails. The same happens with file.good(). Somehow they never return false;
# 4  
Old 11-17-2008
I now see that getline returns a value, which may be why it doesn't throw an exception on all systems -- it can't do both at the same time, the implementor had to pick one in the event of failure. As for why EOF doesn't occur after a failed getline, I can only guess how Sun implemented their iostream. It certainly looks like it ought to produce EOF under those circumstances. So I guess you'll just need to check all return values for errors to be compatible with both. Which is probably a good idea anyway...

so your usual while loop, and with the getline, you do this:

Code:
try{
if(getline(file, buffer) <= 0)
  break;
}

which will cause the loop to break when getline fails as well as checking for exceptions.

Last edited by Corona688; 11-17-2008 at 11:33 AM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

confused with << EOF EOF

Hi friends , I am confused with << EOF EOF Most of the cases I found sqlplus $db_conn_str << EOF some sql staments EOF another exapmle is #!/bin/sh echo -n 'what is the value? ' read value sed 's/XXX/'$value'/' <<EOF The value is XXX EOF (1 Reply)
Discussion started by: imipsita.rath
1 Replies

2. Shell Programming and Scripting

Until eof do????

Hey! Can I write a routine that allows me to in a txt file check line by line until the end of file? something like until do ---some code--- done maybe it is a stupid question but I never learned shell scripts and I need this :p thanks in advance (1 Reply)
Discussion started by: ruben.rodrigues
1 Replies

3. Shell Programming and Scripting

What is << EOF

I'm trying to connect to oracle with the following code in the script: checksqlerror{ if echo $1 exit fi } $SQLPLUS username/password@schemaname checksqlerror "failed to connect to oracle" If I'm passing wrong schema name,instead of executing checksqlerror it stops and expects user... (2 Replies)
Discussion started by: BhawanaAggarwal
2 Replies

4. UNIX for Dummies Questions & Answers

\n after EOF

Hello all, I have unix file that ends with the following EOF '9999999999' I want to remove the '\n' character after EOF. What is the command that should be included in the script, before sending the file? will this work: $ echo "<99999999999>\c" >> <filename> thanks in advance. (3 Replies)
Discussion started by: priya12
3 Replies

5. Shell Programming and Scripting

how can i check in csh if command found or not found ?

hello all im trying to use in sun Solaris the information received from the top command now i several machines that dont have install the top program so when im running the script im geting error saying after im running this code : set MemoryInfo = `top | grep Memory` if (... (2 Replies)
Discussion started by: umen
2 Replies

6. Shell Programming and Scripting

Eof

hi, in a shell script i came accross the following bit of code 1.shift $(($OPTIND - 1)) 2.if ; then 3. cat << EOF >&2 4.Usage: $0 lockfilename 5.EOF 6. exit 1 7.fi I am not able to understand the meaning of lines(1,3,5). Can any one of u tell me the purpose of above said lines.... (1 Reply)
Discussion started by: ravi raj kumar
1 Replies

7. UNIX for Dummies Questions & Answers

Eof

I have written this code: code echo 'Now choose the file or files you want to merge your input with: \c' read filenames filelist="" for file in $filenames; do filelist="$filelist $file" done echo "Now that you've chosen these files ($filelist), please start typing: " until ; do paste -... (2 Replies)
Discussion started by: fiol73
2 Replies

8. UNIX for Dummies Questions & Answers

Eof

hello all, how end of a file is detected in UNIX system? does it make use of any special symbols to identify the EOF? :( thank you all (5 Replies)
Discussion started by: compbug
5 Replies

9. Shell Programming and Scripting

Please help with EOF

Hello, you are an awesome crowd! You answered my last questions, thank you sooo much! I am trying to write a korn shell script that will record the memory my application is using (HP-UX B.11.11) and I have this: if (( $APP > $THRESHOLD )) then echo "Warning message will display" cat... (2 Replies)
Discussion started by: satraver
2 Replies

10. Shell Programming and Scripting

EOF use

Hi, I'd like to access a windows directory from aix with samba client. To allow direct access (not interactive), i'm using EOF like: smbclient \\\\winserver\\windir 'passwd' -U usersmb << EOF cd subwindir put myfile EOF The access is correct but does somebody know how to trap errors... (1 Reply)
Discussion started by: jo_aze
1 Replies
Login or Register to Ask a Question