Below is the cp1.c program: #include <stdio.h> #include <unistd.h> #include <fcn
ID: 3732659 • Letter: B
Question
Below is the cp1.c program:
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#define BUFFERSIZE 4096
#define COPYMODE 0644
void oops(char *, char *);
main(int ac, char *av[])
{
int in_fd, out_fd, n_chars;
char buf[BUFFERSIZE];
/* check args */
if ( ac != 3 ){
fprintf( stderr, "usage: %s source destination ", *av);
exit(1);
}
/* open files */
if ( (in_fd=open(av[1], O_RDONLY)) == -1 )
oops("Cannot open ", av[1]);
if ( (out_fd=creat( av[2], COPYMODE)) == -1 )
oops( "Cannot creat", av[2]);
/* copy files */
while ( (n_chars = read(in_fd , buf, BUFFERSIZE)) > 0 )
if ( write( out_fd, buf, n_chars ) != n_chars )
oops("Write error to ", av[2]);
if ( n_chars == -1 )
oops("Read error from ", av[1]);
/* close files */
if ( close(in_fd) == -1 || close(out_fd) == -1 )
oops("Error closing files","");
}
void oops(char *s1, char *s2)
{
fprintf(stderr,"Error: %s ", s1);
perror(s2);
exit(1);
}
Explanation / Answer
cp command throws an error saying that both files are the same.
To put this feature in your code just add the following code after you check the number of arguements.
int same = 1;
if ( strlen(av[1]) == strlen(av[2]) ) {
for ( int i = 0 ; i < strlen(av[1]) ; i++ ) {
if ( av[1][i] != av[2][i] ) {
same = 0;
break;
}
}
}
if ( same == 0 ) {
fprintf( stderr, "Both files are same ");
exit(0);
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.