From 8d69033266fd61d7e0751a194f4662d5da555a45 Mon Sep 17 00:00:00 2001
From: vyvyvyThao <wn73@drexel.edu>
Date: Mon, 3 Feb 2025 21:29:42 -0500
Subject: [PATCH] reupload everything

---
 1-C/makefile.txt    |  20 ++
 1-C/output          |   1 +
 2-StudentDB/sdbsc   | Bin 21776 -> 0 bytes
 2-StudentDB/sdbsc.c | 674 --------------------------------------------
 4 files changed, 21 insertions(+), 674 deletions(-)
 create mode 100644 1-C/makefile.txt
 create mode 100644 1-C/output
 delete mode 100755 2-StudentDB/sdbsc
 delete mode 100644 2-StudentDB/sdbsc.c

diff --git a/1-C/makefile.txt b/1-C/makefile.txt
new file mode 100644
index 0000000..98655da
--- /dev/null
+++ b/1-C/makefile.txt
@@ -0,0 +1,20 @@
+# Compiler settings
+CC = gcc
+CFLAGS = -Wall -Wextra -g
+
+# Target executable name
+TARGET = stringfun
+
+# Default target
+all: $(TARGET)
+
+# Compile source to executable
+$(TARGET): stringfun.c
+	$(CC) $(CFLAGS) -o $(TARGET) $^
+
+# Clean up build files
+clean:
+	rm -f $(TARGET)
+
+# Phony targets
+.PHONY: all clean
\ No newline at end of file
diff --git a/1-C/output b/1-C/output
new file mode 100644
index 0000000..4c0968b
--- /dev/null
+++ b/1-C/output
@@ -0,0 +1 @@
+Systems Programming is Awesome!...................
\ No newline at end of file
diff --git a/2-StudentDB/sdbsc b/2-StudentDB/sdbsc
deleted file mode 100755
index a4f18d52439e321b26a5cb44452e529cbc3a42ee..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 21776
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

diff --git a/2-StudentDB/sdbsc.c b/2-StudentDB/sdbsc.c
deleted file mode 100644
index 6861a49..0000000
--- a/2-StudentDB/sdbsc.c
+++ /dev/null
@@ -1,674 +0,0 @@
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <fcntl.h>      //c library for system call file routines
-#include <string.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include <stdbool.h>
-
-//database include files
-#include "db.h"
-#include "sdbsc.h"
-
-/*
- *  open_db
- *      dbFile:  name of the database file
- *      should_truncate:  indicates if opening the file also empties it
- * 
- *  returns:  File descriptor on success, or ERR_DB_FILE on failure
- * 
- *  console:  Does not produce any console I/O on success
- *            M_ERR_DB_OPEN on error
- *             
- */
-int open_db(char *dbFile, bool should_truncate){
-    // Set permissions: rw-rw----
-    // see sys/stat.h for constants
-    mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP;
-
-    //open the file if it exists for Read and Write, 
-    //create it if it does not exist
-    int    flags = O_RDWR | O_CREAT;
-
-    if (should_truncate) 
-        flags += O_TRUNC;
-
-    // Now open file
-    int fd = open(dbFile, flags, mode);
-
-    if (fd == -1) {
-        // Handle the error
-        printf(M_ERR_DB_OPEN);
-        return ERR_DB_FILE;
-    }
-
-    return fd;
-}
-
-/*
- *  get_student
- *      fd:  linux file descriptor
- *      id:  the student id we are looking forname of the
- *      *s:  a pointer where the located (if found) student data will be
- *           copied
- * 
- *  returns:  NO_ERROR       student located and copied into *s
- *            ERR_DB_FILE    database file I/O issue
- *            SRCH_NOT_FOUND student was not located in the database
- * 
- *  console:  Does not produce any console I/O used by other functions
- */
-int get_student(int fd, int id, student_t *s){
-    off_t offset;
-    ssize_t bytesRead;
-
-    // find record in position in db using student id
-    offset = (id - 1) * STUDENT_RECORD_SIZE;
-
-    if (lseek(fd, offset, SEEK_SET) == -1) {
-        return ERR_DB_FILE; // database file I/O issue
-    }
-
-    // read record
-    bytesRead = read(fd, s, STUDENT_RECORD_SIZE);
-    if (bytesRead == -1) {
-        return ERR_DB_FILE;
-
-    } else if (bytesRead < STUDENT_RECORD_SIZE || memcmp(s, &EMPTY_STUDENT_RECORD, sizeof(student_t)) == 0) {
-        return SRCH_NOT_FOUND;
-    }
-
-    return NO_ERROR;
-}
-
-/*
- *  add_student
- *      fd:     linux file descriptor
- *      id:     student id (range is defined in db.h )
- *      fname:  student first name
- *      lname:  student last name
- *      gpa:    GPA as an integer (range defined in db.h)
- * 
- *  Adds a new student to the database.  After calculating the index for the
- *  student, check if there is another student already at that location.  A good
- *  way is to use something like memcmp() to ensure that the location for this
- *  student contains all zero byes indicating the space is empty. 
- * 
- *  returns:  NO_ERROR       student added to database
- *            ERR_DB_FILE    database file I/O issue
- *            ERR_DB_OP      database operation logically failed (aka student
- *                           already exists)  
- * 
- * 
- *  console:  M_STD_ADDED       on success
- *            M_ERR_DB_ADD_DUP  student already exists
- *            M_ERR_DB_READ     error reading or seeking the database file
- *            M_ERR_DB_WRITE    error writing to db file (adding student)
- *            
- */
-int add_student(int fd, int id, char *fname, char *lname, int gpa){
-    off_t offset;
-    ssize_t bytesWrite;
-
-    offset = (id - 1) * STUDENT_RECORD_SIZE;
-
-    static student_t temp;
-    int duplicate = get_student(fd, id, &temp); 
-
-    if (duplicate == ERR_DB_FILE) {
-        // error reading or seeking
-        printf(M_ERR_DB_READ);
-        return ERR_DB_FILE;
-
-    }
-
-    if (duplicate == NO_ERROR) {
-        // student already exists
-        // printf("There's an existing student named %s with ID %d\n", temp.fname, id);
-        printf(M_ERR_DB_ADD_DUP, id);
-        return ERR_DB_OP;
-
-    } 
-    
-    if (duplicate == SRCH_NOT_FOUND) {
-        temp.id = id;
-        strcpy(temp.fname, fname);
-        strcpy(temp.lname,lname);
-        temp.gpa = gpa;
-
-        // reset position before writing
-        if (lseek(fd, offset, SEEK_SET) == -1) {
-            printf(M_ERR_DB_READ);
-            return ERR_DB_FILE;
-        }
-
-        bytesWrite = write(fd, &temp, STUDENT_RECORD_SIZE);
-        if (bytesWrite == -1 || bytesWrite < STUDENT_RECORD_SIZE) {
-            // free(temp);
-            printf(M_ERR_DB_WRITE); // error writing to db file
-            return ERR_DB_FILE;
-        }
-
-        // free(temp);
-        printf(M_STD_ADDED, id);
-        return NO_ERROR;
-    }
-}
-
-/*
- *  del_student
- *      fd:     linux file descriptor
- *      id:     student id to be deleted
- * 
- *  Removes a student to the database.  Use the get_student() function to
- *  locate the student to be deleted. If there is a student at that location
- *  write an empty student record - see EMPTY_STUDENT_RECORD from db.h at 
- *  that location. 
- * 
- *  returns:  NO_ERROR       student deleted from database
- *            ERR_DB_FILE    database file I/O issue
- *            ERR_DB_OP      database operation logically failed (aka student
- *                           not in database)  
- * 
- * 
- *  console:  M_STD_DEL_MSG      on success
- *            M_STD_NOT_FND_MSG  student not in database, cant be deleted
- *            M_ERR_DB_READ      error reading or seeking the database file
- *            M_ERR_DB_WRITE     error writing to db file (adding student)
- *            
- */
-int del_student(int fd, int id){
-    off_t offset;
-    ssize_t bytesWrite;
-    static student_t s;
-
-    offset = (id - 1) * STUDENT_RECORD_SIZE;
-    
-    if (lseek(fd, offset, SEEK_SET) == -1) {
-        printf(M_ERR_DB_READ);
-        return ERR_DB_FILE;
-    }
-
-    int student_dne = get_student(fd, id, &s);
-
-    if (student_dne == NO_ERROR) {
-
-        // reset position before writing
-        if (lseek(fd, offset, SEEK_SET) == -1) {
-            printf(M_ERR_DB_READ);
-            return ERR_DB_FILE;
-        }
-
-        bytesWrite = write(fd, &EMPTY_STUDENT_RECORD, STUDENT_RECORD_SIZE);
-        if (bytesWrite != STUDENT_RECORD_SIZE) {
-            printf(M_ERR_DB_WRITE);
-            return ERR_DB_FILE;
-        }
-
-        printf(M_STD_DEL_MSG, id);
-        return NO_ERROR;
-    }
-
-    if (student_dne == SRCH_NOT_FOUND) {
-        printf(M_STD_NOT_FND_MSG, id);
-        return ERR_DB_OP;
-    } 
-    
-    else {
-        printf(M_ERR_DB_READ);
-        return ERR_DB_FILE;
-    }
-    
-}
-
-/*
- *  count_db_records
- *      fd:     linux file descriptor
- * 
- *  Counts the number of records in the database.  Start by reading the 
- *  database at the beginning, and continue reading individual records
- *  until you it EOF.  EOF is when the read() syscall returns 0. Check
- *  if a slot is empty or previously deleted by investigating if all of 
- *  the bytes in the record read are zeros - I would suggest using memory
- *  compare memcmp() for this. Create a counter variable and initialize it
- *  to zero, every time a non-zero record is read increment the counter.  
- * 
- *  returns:  <number>       returns the number of records in db on success
- *            ERR_DB_FILE    database file I/O issue
- *            ERR_DB_OP      database operation logically failed (aka student
- *                           not in database)  
- * 
- * 
- *  console:  M_DB_RECORD_CNT  on success, to report the number of students in db
- *            M_DB_EMPTY       on success if the record count in db is zero
- *            M_ERR_DB_READ    error reading or seeking the database file
- *            M_ERR_DB_WRITE   error writing to db file (adding student)
- *            
- */
-int count_db_records(int fd) {
-    student_t* s = malloc(sizeof(student_t));
-    int record_count = 0;
-
-    while (1) {
-        ssize_t bytes_read = read(fd, s, STUDENT_RECORD_SIZE);
-
-        if (bytes_read == 0) {  
-            // EOF
-            break;
-
-        } else if (bytes_read < 0) {  
-            free(s);
-            printf(M_ERR_DB_READ);
-            return ERR_DB_FILE;
-        }
-
-        // check if record is empty or deleted
-        if (bytes_read == STUDENT_RECORD_SIZE && memcmp(s, &EMPTY_STUDENT_RECORD, sizeof(student_t)) != 0) {
-            record_count++;
-        }
-    }
-
-    if (record_count == 0) {
-        printf(M_DB_EMPTY);
-    } else {
-        printf(M_DB_RECORD_CNT, record_count);
-    }
-
-    free(s);
-    return record_count;
-}
-
-/*
- *  print_db
- *      fd:     linux file descriptor
- * 
- *  Prints all records in the database.  Start by reading the 
- *  database at the beginning, and continue reading individual records
- *  until you it EOF.  EOF is when the read() syscall returns 0. Check
- *  if a slot is empty or previously deleted by investigating if all of 
- *  the bytes in the record read are zeros - I would suggest using memory
- *  compare memcmp() for this. Be careful as the database might be empty.
- *  on the first real row encountered print the header for the required output:
- * 
- *     printf(STUDENT_PRINT_HDR_STRING, "ID", 
- *                  "FIRST NAME", "LAST_NAME", "GPA");
- * 
- *  then for each valid record encountered print the required output: 
- * 
- *     printf(STUDENT_PRINT_FMT_STRING, student.id, student.fname, 
- *                    student.lname, calculated_gpa_from_student);
- * 
- *  The code above assumes you are reading student records into a local
- *  variable named student that is of type student_t. Also dont forget that
- *  the GPA in the student structure is an int, to convert it into a real
- *  gpa divide by 100.0 and store in a float variable.
- * 
- *  returns:  NO_ERROR       on success
- *            ERR_DB_FILE    database file I/O issue
- * 
- * 
- *  console:  <see above>      on success, print table or database empty
- *            M_ERR_DB_READ    error reading or seeking the database file
- *            
- */
-int print_db(int fd) {
-    off_t offset;
-    student_t* s = malloc(sizeof(student_t));
-    ssize_t bytesRead;
-    int record_count = 0;
-
-    while (1) {
-        ssize_t bytes_read = read(fd, s, STUDENT_RECORD_SIZE);
-
-        if (bytes_read == 0) {  
-            // EOF
-            break;
-
-        } else if (bytes_read < 0) {  
-            free(s);
-            printf(M_ERR_DB_READ);
-            return ERR_DB_FILE;
-        }
-
-        // check if record is empty or deleted
-        if (bytes_read == STUDENT_RECORD_SIZE && memcmp(s, &EMPTY_STUDENT_RECORD, sizeof(student_t)) != 0) {
-            record_count++;
-            if (record_count == 1) {
-                printf(STUDENT_PRINT_HDR_STRING, "ID", "FIRST_NAME", "LAST_NAME", "GPA");
-            }
-
-            float calculated_gpa_from_student = s->gpa / 100.0;
-            printf(STUDENT_PRINT_FMT_STRING, s->id, s->fname, s->lname, calculated_gpa_from_student);
-        }
-    }
-
-    if (record_count == 0) {
-        printf(M_DB_EMPTY);
-    }
-
-    return NO_ERROR;
-}
-
-/*
- *  print_student
- *      *s:   a pointer to a student_t structure that should
- *            contain a valid student to be printed
- * 
- *  Start by ensuring that provided student pointer is valid.  To do this
- *  make sure it is not NULL and that s->id is not zero.  After ensuring 
- *  that the student is valid, print it the exact way that is described
- *  in the print_db() function by first printing the header then the
- *  student data:
- * 
- *     printf(STUDENT_PRINT_HDR_STRING, "ID", 
- *                  "FIRST NAME", "LAST_NAME", "GPA");
- * 
- *     printf(STUDENT_PRINT_FMT_STRING, s->id, s->fname, 
- *                    student.lname, calculated_gpa_from_s);
- * 
- *  Dont forget that  the GPA in the student structure is an int, to convert 
- *  it into a real gpa divide by 100.0 and store in a float variable. 
- * 
- *  returns:  nothing, this is a void function
- * 
- * 
- *  console:  <see above>      on success, print table or database empty
- *            M_ERR_STD_PRINT  if the function argument s is NULL or if
- *                             s->id is zero
- *            
- */
-void print_student(student_t *s){
-    if (s == NULL || s->id == 0) {
-        printf(M_ERR_STD_PRINT);
-        return;
-    }
-        
-    float coverted_gpa = s->gpa / 100.0;
-
-    printf(STUDENT_PRINT_HDR_STRING, "ID", "FIRST NAME", "LAST NAME", "GPA");
-    printf(STUDENT_PRINT_FMT_STRING, s->id, s->fname, s->lname, coverted_gpa);
-}
-
-/*
- *  NOTE IMPLEMENTING THIS FUNCTION IS EXTRA CREDIT
- *
- *  compress_db
- *      fd:     linux file descriptor
- * 
- *  This assignment takes advantage of the way Linux handles sparse files
- *  on disk. Thus if there is a large hole between student records, Linux
- *  will not use any physical storage.  However, when a database record is
- *  deleted storage is used to write a blank - see EMPTY_STUDENT_RECORD from
- *  db.h - record.  
- * 
- *  Since Linux provides no way to delete data in the middle of a file, and
- *  deleted records take up physical storage, this function will compress the
- *  database by rewriting a new database file that only includes valid student
- *  records. There are a number of ways to do this, but since this is extra credit
- *  you need to figure this out on your own. 
- * 
- *  At a high level create a temporary database file then copy all valid students from
- *  the active database (passed in via fd) to the temporary file. When this is done
- *  rename the temporary database file to the name of the real database file. See
- *  the constants in db.h for required file names:
- *
- *         #define DB_FILE     "student.db"        //name of database file
- *         #define TMP_DB_FILE ".tmp_student.db"   //for extra credit 
- * 
- *  Note that you are passed in the fd of the database file to be compressed, 
- *  it is very likely you will need to close it to overwrite it with the
- *  compressed version of the file.  To ensure the caller can work with the
- *  compressed file after you create it, it is a good design to return the fd
- *  of the new compressed file from this function
- * 
- *  returns:  <number>       returns the fd of the compressed database file
- *            ERR_DB_FILE    database file I/O issue
- * 
- * 
- *  console:  M_DB_COMPRESSED_OK  on success, the db was successfully compressed.
- *            M_ERR_DB_OPEN    error when opening/creating temporary database file.
- *                             this error should also be returned after you
- *                             compressed the database file and if you are unable
- *                             to open it to pass the fd back to the caller
- *            M_ERR_DB_CREATE  error creating the db file. For instance the
- *                             inability to copy the temporary file back as
- *                             the primary database file. 
- *            M_ERR_DB_READ    error reading or seeking the the db or tempdb file
- *            M_ERR_DB_WRITE   error writing to db or tempdb file (adding student)
- *            
- */
-int compress_db(int fd){
-    printf(M_NOT_IMPL);
-    return fd;
-}
-
-
-/*
- *  validate_range
- *      id:  proposed student id
- *      gpa: proposed gpa
- * 
- *  This function validates that the id and gpa are in the allowable ranges
- *  as per the specifications.  It checks if the values are within the
- *  inclusive range using constents in db.h
- * 
- *  returns:    NO_ERROR       on success, both ID and GPA are in range
- *              EXIT_FAIL_ARGS if either ID or GPA is out of range
- * 
- *  console:  This function does not produce any output
- *            
- */
-int validate_range(int id, int gpa){
-
-    if ((id < MIN_STD_ID) || (id > MAX_STD_ID))
-        return EXIT_FAIL_ARGS;
-
-    if ((gpa < MIN_STD_GPA) || (gpa > MAX_STD_GPA))
-        return EXIT_FAIL_ARGS;
-
-    return NO_ERROR;
-}
-
-/*
- *  usage
- *      exename:  the name of the executable from argv[0]
- * 
- *  Prints this programs expected usage
- * 
- *  returns:    nothing, this is a void function
- * 
- *  console:  This function prints the usage information
- *            
- */
-void usage(char *exename){
-    printf("usage: %s -[h|a|c|d|f|p|z] options.  Where:\n", exename);
-    printf("\t-h:  prints help\n");
-    printf("\t-a id first_name last_name gpa(as 3 digit int):  adds a student\n");
-    printf("\t-c:  counts the records in the database\n");
-    printf("\t-d id:  deletes a student\n");
-    printf("\t-f id:  finds and prints a student in the database\n");
-    printf("\t-p:  prints all records in the student database\n");
-    printf("\t-x:  compress the database file [EXTRA CREDIT]\n");
-    printf("\t-z:  zero db file (remove all records)\n");
-}
-
-
-//Welcome to main()
-int main(int argc, char *argv[]){
-    char opt;           //user selected option
-    int fd;             //file descriptor of database files
-    int rc;             //return code from various operations
-    int exit_code;      //exit code to shell
-    int id;             //userid from argv[2]
-    int gpa;            //gpa from argv[5]
-
-    //space for a student structure which we will get back from
-    //some of the functions we will be writing such as get_student(),
-    //and print_student(). 
-    student_t student = {0};
-
-    //This function must have at least one arg, and the arg must start
-    //with a dash
-    if ((argc < 2) || (*argv[1] != '-')){
-        usage(argv[0]);
-        exit(1);
-    }
-
-    //The option is the first character after the dash for example
-    //-h -a -c -d -f -p -x -z
-    opt = (char)*(argv[1]+1);   //get the option flag
-
-    //handle the help flag and then exit normally
-    if (opt == 'h'){
-        usage(argv[0]);
-        exit(EXIT_OK);
-    }
-
-    //now lets open the file and continue if there is no error
-    //note we are not truncating the file using the second
-    //parameter
-    fd = open_db(DB_FILE, false);
-    if (fd < 0){
-        exit(EXIT_FAIL_DB);
-    }
-
-    //set rc to the return code of the operation to ensure the program
-    //use that to determine the proper exit_code.  Look at the header
-    //sdbsc.h for expected values. 
-
-    exit_code = EXIT_OK;
-    switch(opt){
-        case 'a':
-            //   arv[0] arv[1]  arv[2]      arv[3]    arv[4]  arv[5]         
-            //prog_name     -a      id  first_name last_name     gpa
-            //-------------------------------------------------------
-            //example:  prog_name -a 1 John Doe 341
-            if (argc != 6){
-                usage(argv[0]);
-                exit_code = EXIT_FAIL_ARGS;
-                break;
-            }
-
-            //convert id and gpa to ints from argv.  For this assignment assume
-            //they are valid numbers
-            id = atoi(argv[2]);
-            gpa = atoi(argv[5]);
-
-            exit_code = validate_range(id,gpa);
-            if (exit_code == EXIT_FAIL_ARGS){
-                printf(M_ERR_STD_RNG);
-                break;
-            }
-
-            rc = add_student(fd, id, argv[3], argv[4], gpa);
-            if (rc < 0)
-                exit_code = EXIT_FAIL_DB;
-
-            break;
-
-        case 'c':
-            //    arv[0] arv[1]    
-            //prog_name     -c 
-            //-----------------
-            //example:  prog_name -c  
-            rc = count_db_records(fd);
-            if (rc < 0)
-                exit_code = EXIT_FAIL_DB;
-            break;
-
-        case 'd':
-            //   arv[0]  arv[1]  arv[2]    
-            //prog_name     -d      id 
-            //-------------------------
-            //example:  prog_name -d 100    
-            if (argc != 3){
-                usage(argv[0]);
-                exit_code = EXIT_FAIL_ARGS;
-                break;
-            }
-            id = atoi(argv[2]);
-            rc = del_student(fd, id);
-            if (rc < 0)
-                exit_code = EXIT_FAIL_DB;
-
-            break;
-
-        case 'f':
-            //    arv[0] arv[1]  arv[2]    
-            //prog_name     -f      id
-            //-------------------------
-            //example:  prog_name -f 100       
-            if (argc != 3){
-                usage(argv[0]);
-                exit_code = EXIT_FAIL_ARGS;
-                break;
-            }
-            id = atoi(argv[2]);
-            rc = get_student(fd, id, &student);
-
-           
-            switch (rc){
-                case NO_ERROR:
-                    print_student(&student);
-                    break;
-                case SRCH_NOT_FOUND:
-                    printf(M_STD_NOT_FND_MSG, id);
-                    exit_code = EXIT_FAIL_DB;
-                    break;
-                default:
-                    printf(M_ERR_DB_READ);
-                    exit_code = EXIT_FAIL_DB;
-                    break;
-            }
-            break;
-
-        case 'p':
-            //    arv[0] arv[1]    
-            //prog_name     -p 
-            //-----------------
-            //example:  prog_name -p  
-            rc = print_db(fd);
-            if (rc < 0)
-                exit_code = EXIT_FAIL_DB;
-            break;
-
-        case 'x':
-            //    arv[0] arv[1]    
-            //prog_name     -x 
-            //-----------------
-            //example:  prog_name -x 
-
-            //remember compress_db returns a fd of the compressed database.
-            //we close it after this switch statement 
-            fd = compress_db(fd);
-            if (fd < 0)
-                exit_code = EXIT_FAIL_DB;
-            break;
-
-        case 'z':
-            //    arv[0] arv[1]    
-            //prog_name     -x 
-            //-----------------
-            //example:  prog_name -x 
-            //HINT:  close the db file, we already have fd 
-            //       and reopen db indicating truncate=true
-            close(fd);
-            fd = open_db(DB_FILE, true);
-            if (fd < 0){
-                exit_code = EXIT_FAIL_DB;
-                break;
-            }
-            printf(M_DB_ZERO_OK);
-            exit_code = EXIT_OK;
-            break;
-        default:
-            usage(argv[0]);
-            exit_code = EXIT_FAIL_ARGS;
-    }
-
-    //dont forget to close the file before exiting, and setting the 
-    //proper exit code - see the header file for expected values
-    close(fd);
-    exit(exit_code);
-}
-- 
GitLab