Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

/* cp.c * uses read and write with * tunable buffer size usage: cp1 src dest */ #include #include #include #define BUFFERSIZE 4096 #define COPYMODE

/* cp.c

* uses read and write with * tunable buffer size usage: cp1 src dest

*/

#include

#include

#include

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

}

/* ls.c * purpose list contents of directory or directories * action if no args, use . else list files in args * note uses stat and pwd.h and grp.h */ #include  #include  #include  #include  #include  void do_ls(char[]); void dostat(char *); void show_file_info( char *, struct stat *); void mode_to_letters( int , char [] ); char *uid_to_name( uid_t ); char *gid_to_name( gid_t ); int main(int ac, char *av[]) { if ( ac == 1 ) do_ls( "." ); else while ( --ac ){ printf("%s: ", *++av ); do_ls( *av ); } return 0; } void do_ls( char dirname[] ) /* * list files in directory called dirname */ { DIR *dir_ptr; /* the directory */ struct dirent *direntp; /* each entry */ if ( ( dir_ptr = opendir( dirname ) ) == NULL ) fprintf(stderr,"ls2: cannot open %s ", dirname); else { while ( ( direntp = readdir( dir_ptr ) ) != NULL ) { if (strcmp(direntp->d_name,".")==0 || strcmp(direntp->d_name,"..")==0) continue; dostat( direntp->d_name ); } closedir(dir_ptr); } } void dostat( char *filename ) { struct stat info; if ( stat(filename, &info) == -1 ) /* cannot stat */ perror( filename ); /* say why */ else /* else show info */ show_file_info( filename, &info ); } void show_file_info( char *filename, struct stat *info_p ) /* * display the info about 'filename'. The info is stored in struct at *info_p */ { char *uid_to_name(), *ctime(), *gid_to_name(), *filemode(); void mode_to_letters(); char modestr[11]; mode_to_letters( info_p->st_mode, modestr ); printf( "%s" , modestr ); printf( "%4d " , (int) info_p->st_nlink); printf( "%-8s " , uid_to_name(info_p->st_uid) ); printf( "%-8s " , gid_to_name(info_p->st_gid) ); printf( "%8ld " , (long)info_p->st_size); printf( "%.12s ", 4+ctime(&info_p->st_mtime)); printf( "%s " , filename ); } /* * utility functions */ /* * This function takes a mode value and a char array * and puts into the char array the file type and the * nine letters that correspond to the bits in mode. * NOTE: It does not code setuid, setgid, and sticky * codes */ void mode_to_letters( int mode, char str[] ) { strcpy( str, "----------" ); /* default=no perms */ if ( S_ISDIR(mode) ) str[0] = 'd'; /* directory? */ if ( S_ISCHR(mode) ) str[0] = 'c'; /* char devices */ if ( S_ISBLK(mode) ) str[0] = 'b'; /* block device */ if ( mode & S_IRUSR ) str[1] = 'r'; /* 3 bits for user */ if ( mode & S_IWUSR ) str[2] = 'w'; if ( mode & S_IXUSR ) str[3] = 'x'; if ( mode & S_IRGRP ) str[4] = 'r'; /* 3 bits for group */ if ( mode & S_IWGRP ) str[5] = 'w'; if ( mode & S_IXGRP ) str[6] = 'x'; if ( mode & S_IROTH ) str[7] = 'r'; /* 3 bits for other */ if ( mode & S_IWOTH ) str[8] = 'w'; if ( mode & S_IXOTH ) str[9] = 'x'; } #include  char *uid_to_name( uid_t uid ) /* * returns pointer to username associated with uid, uses getpw() */ { struct passwd *getpwuid(), *pw_ptr; static char numstr[10]; if ( ( pw_ptr = getpwuid( uid ) ) == NULL ){ sprintf(numstr,"%d", uid); return numstr; } else return pw_ptr->pw_name ; } #include  char *gid_to_name( gid_t gid ) /* * returns pointer to group number gid. used getgrgid(3) */ { struct group *getgrgid(), *grp_ptr; static char numstr[10]; if ( ( grp_ptr = getgrgid(gid) ) == NULL ){ sprintf(numstr,"%d", gid); return numstr; } else return grp_ptr->gr_name; }

Write a basic file managment system with following capabilities. Suppose the name of the program is myFS. When it executed as "$ myFS ls -l /home" The program should provide the file listing of the given directory. The program should list the filename, file size, and time last modified for each file within the directory. The program should provide the user with the option to sort the listing based on filename, on file size, or on time last modified. The program should run once and quit (it does not loop). The syntax (usage) for the program should be where -s indicates sort by file size and -t indicates sort by time last modified. For example: "$ myFS ls -l -t /home should be the time last modified. These flags are optional but mutually exclusive. The directory is also optional; if it is omitted, then a default directory of . (the current directory) should be assumed. Every possible combination of command line arguments from the above syntax should be tested. The output should be displayed with fixed-width columns for the size and date. Column orders should be size, then date, then filename. The time last modified should be printed as a 12-character string (e.g., Oct 10 11:37). This can be done by manipulating the returned string from the ctime() function and printing only a portion of it.

The file system program should be able to make a copy of the source file to the destination address. For example: "$myFS cp bing.c /home/bingocp.c" the command copies bing.c to the /home/bingocp.c

I have the ls.c already and the cp.c as copied above, all i need is how to do the ls -t, ls -s and the cp.

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Readings In Database Systems

Authors: Michael Stonebraker

2nd Edition

0934613656, 9780934613651

More Books

Students also viewed these Databases questions

Question

Explain the function and purpose of the Job Level Table.

Answered: 1 week ago