I’m working on a homework assignment and I ran into a little snag.
I’m trying to read a filename from standard input and then stat the file to get the size (as per the assignment’s requirements):
#define BUFFSIZE 4096
int
main(void) {
int n;
char buffer[BUFFSIZE];
struct stat buf;
while ((n = read(STDIN_FILENO, buffer, BUFFSIZE)) > 0) {
stat(buffer, &buf);
perror("stat");
}
}
Here’s the output when ran (I entered the filename file):
file
stat: No such file or directory
But if I try something like this:
#define BUFFSIZE 4096
int
main(void) {
int n;
char buffer[BUFFSIZE] = "file";
struct stat buf;
stat(buffer, &buf);
perror("stat");
}
I get:
stat: Success
The file named file is in the directory that I’m running the program from.
How come there is a difference between reading in the string “file” and just initializing the array to the string “file”?
Before calling
stat()print the value ofbufferto standard output:It will not be what you expect as
read()will not NULL terminatebufferfor you.Initialise
bufferbeforeread().Not sure why you looping on the
read()as you should acquire the complete name of the file before callingstat(). If you have not been forced to useread()consider usingfgets().