Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

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);
}

What does the standard cp do if you try to copy a file onto itself? For example: cp file1 file1 What do you think is the correct action? Modify cp1.c to handle that situation.

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);

}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote