Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Reading general file

Tags:

c

unix

I'm making a program that reads in a file from stdin, does something to it and sends it to stdout.

As it stands, I have a line in my program:

while((c = getchar()) != EOF){

where c is an int.

However the problem is I want to use this program on ELF executables. And it appears that there must be the byte that represents EOF for ascii files inside the executable, which results in it being truncated (correct me if I'm wrong here - this is just my hypothesis).

What is an effective general way to go about doing this? I could dig up documents on the ELF format and then just check for whatever comes at the end. That would be useful, but I think it would be better if I could still apply this program to any kind of file.

like image 888
oadams Avatar asked May 31 '26 12:05

oadams


2 Answers

You'll be fine - the EOF constant doesn't contain a valid ASCII value (it's typically -1).

For example, below is an excerpt from stdio.h on my system:

/* End of file character.
   Some things throughout the library rely on this being -1.  */
#ifndef EOF
# define EOF (-1)
#endif
like image 53
NPE Avatar answered Jun 04 '26 02:06

NPE


You might want to go a bit lower level and use the system functions like open(), close() and read(), this way you can do what you like with the input as it will get stored in your own buffer.

like image 44
ColWhi Avatar answered Jun 04 '26 00:06

ColWhi



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!