Initial commit.
This commit is contained in:
commit
2389bd7bd4
|
@ -0,0 +1,124 @@
|
|||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
|
||||
/**************************************************************************
|
||||
* Authors: Gary Fleming, Amber McCloughan
|
||||
* Class: CIS452 - Operating Systems Concepts
|
||||
* Professor: Dr. Greg Wolffe
|
||||
* Date: 4/19/2019
|
||||
*
|
||||
* Program that mimics the ln command's basic functionality.
|
||||
* You can create soft links or hard links using this program.
|
||||
*
|
||||
* Arguments
|
||||
* -------------------------------------------------------------------------
|
||||
* -s : Specifies we're creating a soft link.
|
||||
* [source] : Input a file that will be linked to. MUST COME
|
||||
* FIRST!
|
||||
* [destination] : Input a file name for the new link file. MUST
|
||||
* COME LAST!
|
||||
***************************************************************************/
|
||||
|
||||
#define MAX_BUF_SIZE 102
|
||||
|
||||
/**
|
||||
* Main function of the program. Takes in
|
||||
* three possible arguments: -s, [source],
|
||||
* and [destination].
|
||||
*
|
||||
* @param argc, number of arguments.
|
||||
* @param argv, the actual arguments.
|
||||
*/
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
// Tracking if we're doing a symlink.
|
||||
int sFlag = 0;
|
||||
|
||||
// For counting arguments.
|
||||
int numCount = 0;
|
||||
|
||||
// Used in the for loop when checking arguments.
|
||||
int i;
|
||||
|
||||
// Buffer for link source.
|
||||
char *source = malloc(MAX_BUF_SIZE * sizeof(char));
|
||||
|
||||
// Buffer for the new link.
|
||||
char *dest = malloc(MAX_BUF_SIZE * sizeof(char));
|
||||
|
||||
// Reading the program arguments.
|
||||
for (i = 1; i < argc; i++)
|
||||
{
|
||||
// If we found the -s flag.
|
||||
if (!strcmp(argv[i], "-s"))
|
||||
{
|
||||
sFlag = 1;
|
||||
}
|
||||
// For file path arguments.
|
||||
else
|
||||
{
|
||||
// For the source file.
|
||||
if (numCount == 0)
|
||||
{
|
||||
strcpy(source, argv[i]);
|
||||
numCount++;
|
||||
}
|
||||
// For the destination file (link).
|
||||
else if (numCount == 1)
|
||||
{
|
||||
strcpy(dest, argv[i]);
|
||||
numCount++;
|
||||
}
|
||||
// There must have been too many arguments.
|
||||
else
|
||||
{
|
||||
printf("Too many arguments provided!\n");
|
||||
free(source);
|
||||
free(dest);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// There must have not been enough arguments.
|
||||
if (numCount < 2)
|
||||
{
|
||||
printf("Not enough arguments provided!\n");
|
||||
free(source);
|
||||
free(dest);
|
||||
return -1;
|
||||
}
|
||||
|
||||
// If we're dealing with a hard link.
|
||||
if (sFlag == 0)
|
||||
{
|
||||
if (link(source, dest) < 0)
|
||||
{
|
||||
perror("Huh? There is... ");
|
||||
free(source);
|
||||
free(dest);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
// Otherwise, we're dealing with a soft link.
|
||||
else
|
||||
{
|
||||
if (symlink(source, dest) < 0)
|
||||
{
|
||||
perror("Huh? There is... ");
|
||||
free(source);
|
||||
free(dest);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
// Freeing resources.
|
||||
free(source);
|
||||
free(dest);
|
||||
|
||||
// Goodbye (for the semester)!
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue