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

// mycopy.c /* mycopy utility * makes a copy of a file and assigns the same file

ID: 3703429 • Letter: #

Question

// mycopy.c

/* mycopy utility

* makes a copy of a file and assigns the same file

* permissions to the copy

* Usage:

* ./mycopy <name of original file> <name of copy>

* If the original file does not exist or the user

* lacks permission to read it, mycopy emits an error.

* Also, if a file or directory exists with the name

* proposed for the copy, mycopy emits an error and

* terminates.

*/

#include <stdio.h>

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

#include <unistd.h>

int error( char * msg )

{

perror( msg );

return 2;

}

int usage( char * name )

{

printf( "Usage: %s <file to copy> <name of copy> ", name );

return 1;

}

int main( int argc, char * argv[] )

{

if ( argc != 3 )

return usage( argv[0] );

// open files

// read bytes from original file and

// write to copy

// close files

return 0;

}

imple file utilities using theC You are to create two s the contents of text files language-- one to copy files and the other to display 1. mycopy This is the simpler of the two utilities; it simply copies a file. Following are the specifications: 1. The usage of mycopy is as follows: mycopy 2. If the file to be copied does not exist or the user lacks permission to read it, mycopy emits 3. If a file or directory already exists with the name proposed for the copy, mycopy emits an 4. You are to write code within the main function of the file mycopy.c, which is supplied an error message and quits error and terminates with this assignment. You may also add your own functions, if you wish ? mtrnage

Explanation / Answer

// mycopy.c

/* mycopy utility
* makes a copy of a file and assigns the same file
* permissions to the copy
* Usage:
*   ./mycopy <name of original file> <name of copy>
* If the original file does not exist or the user
* lacks permission to read it, mycopy emits an error.
* Also, if a file or directory exists with the name
* proposed for the copy, mycopy emits an error and
* terminates.
*/

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

int error(char* msg)
{
    perror(msg);
    return 2;
}

int usage(char* name)
{
    printf("Usage: %s <file to copy> <name of copy> ", name);
    return 1;
}
int main(int argc, char* argv[])
{
    if (argc != 3)
        return usage(argv[0]);

    // open files
    // read bytes from original file and
    // write to copy
    FILE *fr = fopen(argv[1], "r");
    if(!fr) {
       error("file to copy does not exists");
   } else {
       FILE *temp = fopen(argv[2], "r");
       if(temp) {
           error("name of copy already exists");
       } else {
           fclose(temp);
           FILE *fw = fopen(argv[2], "w");
           if(fw) {
               char ch = 0;
               while((ch = getc(fr)) != EOF) {
                   putc(ch, fw);
               }
           } else {
               error("can not write to name of copy");
           }
       }
   }
  

    // close files
    return 0;
}