Cs 3377 project | Computer Science homework help

The goal: create several versions of a process that updates and saves a binary file as a new file.

The Setup

This project will be done in 4 parts. To keep them separate, I implemented a factory pattern so

that you (and the autograder) can test each copying method separately. It will look like this:

FileModifierFactory: creates

1. Part1SimpleFileModifier: fill in during part 1

2. Part2MultiProcessModifier: fill in during part 2

3. Part3ThreadedModifier: fill in during part 3

4. Part4SocketModifier: fill in during part 4

You will be given (and not need to modify):

1. main.cpp. Launches the appropriate test based on the arguments

2. Util.cpp/h. Includes some useful attributes.

3. FileModifierFactory.cpp & .h. These build the proper PartXModifier based on

the argument.

4. PipeCopier.cpp & .h. Helps you with the pipe for part 2.

While each part will be tested separately, you are encouraged to reuse code as much of it will

be useful for multiple parts.

The File

The file you are to read, modify, and save is a binary file that contains a sales list. A binary file is

a non-text file, meaning some things (like numbers) aren’t stored as digits but as the ints/floats

you use as variables. The name of the files to read and write will be in Util.h.

The file will be structured like this:





4 bytes

Type Purpose

Integer Tells you how many

entries you need to


Timestamp (#

seconds since


Item’s code

Name of the item


ENTRY (repeated

NumEntries times)

Date/Time sizeof(time_t) Time

Item ID

Item Name Sizeof(int)

50 bytes Integer

char*Item Quantity

Item Price





Number sold

Price of the


What You’ll Do

In each part, the goal is to copy the file, adding two additional sales:

1. The Sobell book:

a. Time 1612195200 (2/1/2020 4 PM GMT)

b. ID 4636152

c. Name “A Programming Guide to Linux Commands, Editors, and Shell

Programming by Sobell” [warning: this is more than 49 characters, so you have

to truncate it—I say 49 because you need a null terminator]

d. Quantity: 70

e. Price: 70.99

2. The Advanced Programming book

a. Time 1613412000 (2/15/2020 6 PM GMT)

b. ID 6530927

c. Name “Advanced Programming in the UNIX Environment by Stevens and Rago”

[warning: more than 49 characters again]

d. Quantity: 68

e. Price: 89.99

Be sure to update the total number of entries to account for these new ones.

Part 1 (Due 3/29)

You will read in the file (Util::inputFileName), add the two entries, and save the file

(Util::outputFileName) using open(), close(), read(), and write().

You must use the low-level functions we will talk about in APUE chapter 3 (open, close, read,

write). Failure to do so will result in 0 points for this part of the project.

It is highly recommended that you do the file reading and writing in class(es) outside

Part1SimpleFileModifier, as that code will be useful later.

Part 2 (Due 4/12)

In this case you will spawn a new process using fork() and exec(), and split the responsibilities

like this:

1. The original process will read the file (2 nd argument=2) and then write the data over a

pipe to the child process.

2. The child process will read the file from the pipe (which will be set to standard input)

and write the data to the output file.

3. PipeMaker will take care of the pipe setup for you:a. Create PipeMaker before the fork.

b. In the parent process, call setUpToWrite() to ready this process for writing. You’ll

get back the file descriptor to write to. Write the file data to that file descriptor

(hint: it’s just like writing to a file).

c. In the child process, before execing, call setUpToRead() to dup the pipe output

to standard input. You can then exec the process (21S_CS3377_Project) with the

write option (2 nd argument=3), read the data from standard input (just a file

descriptor, remember!), and write to the output file.

d. Either the parent or the child process can do the update (but not both,


When calling exec, use the command 21S_CS3377_Project 2 3. This will trigger main to

give you the proper setup for the child process. You will be responsible for spotting the

Util::IOType of WRITE (3), and read from standard input rather than the input file.

Part 3 (Due 4/26)

In this part you will create a thread and pass the file data from one thread to the other. The

threads will be like this:

1. Main thread: read the data, create the thread, and pass the data along

2. Created thread: receive the data and output it to the file

I did all of this inside of Part3ThreadedModifier. Create a mutex and condition for both threads

to share, and pass a pointer to the Part3ThreadedModifier object to pthread_create (and read

it in the other thread). Then you can use the shared mutex and condition to coordinate passing

the data.

The easiest way to pass the data is to use a variable inside Part3ThreadedModifier (type

EntryInfo). The main thread should lock the mutex before creating the receiving thread (and the

receiving thread should attempt to lock the mutex right after it starts up) to ensure the proper

ordering. Then do a loop in each thread like this:

Main (sending) thread

Wait on shared condition (for writing

thread to be ready)

Receiving thread

Signal condition to say we’re ready

Wait on condition (for an entry to be


Update the variable with the next entry

Signal the condition

Loop around and wait on the condition


Retrieve the info, save it for later writingLoop around and signal the condition


Once you’ve passed all the entries (5 or 7 depending on where you want to add the new ones),

unlock the mutex on both sides.

Part 4 (Due 5/10)

Here you will use two processes again, this time with a socket connecting them.

A port number to use (12345) is at Util::portNumber.

• Note: if you get an error that the port is already in use, it’s likely because you just ran

the project and the operating system hasn’t released the port yet. You can either wait a

bit (a few minutes at most) or change the port number (12346, etc.).

When I did this step, I reversed the setup from part 2: the main process here reads from the

socket (writing to the output file) and the spawned process writes to the socket (reading from

the input file). Again, it is up to you where you want to add the two new entries.

When you spawn the 2 nd process, use 21S_CS3377_Project 4 3.

After the fork, the socket reading process (parent process for me) creates a socket and listens

on that socket using the port number above. The socket writing process (child process for me)

creates a socket and connects to the listen socket. Depending on the timing of things the listen

socket may not be ready the first time; here is code to repeatedly wait for the listen socket to

be available:

int amountToWait = 1;

while ( connect(fileDescriptor, (struct sockaddr*) &serverAddress,

sizeof(serverAddress))) {

if ( errno != ECONNREFUSED) {

// Something unexpected happened

throw FileModifyException(“Error connecting”);


std::cout << “Not ready to connect yet…n”;

// Exponential backoff


amountToWait = amountToWait * 2;


Once the connection is made (reader gets back a file descriptor from accept() and the writer

gets out of the loop above) you can transfer the data. Remember that a socket is just a file

descriptor, so your code to write/read from earlier parts will work here, too.

Calculate your paper price
Pages (550 words)
Approximate price: -

Why Work with Us

Top Quality and Well-Researched Papers

We always make sure that writers follow all your instructions precisely. You can choose your academic level: high school, college/university or professional, and we will assign a writer who has a respective degree.

Professional and Experienced Academic Writers

We have a team of professional writers with experience in academic and business writing. Many are native speakers and able to perform any task for which you need help.

Free Unlimited Revisions

If you think we missed something, send your order for a free revision. You have 10 days to submit the order for review after you have received the final document. You can do this yourself after logging into your personal account or by contacting our support.

Prompt Delivery and 100% Money-Back-Guarantee

All papers are always delivered on time. In case we need more time to master your paper, we may contact you regarding the deadline extension. In case you cannot provide us with more time, a 100% refund is guaranteed.

Original & Confidential

We use several writing tools checks to ensure that all documents you receive are free from plagiarism. Our editors carefully review all quotations in the text. We also promise maximum confidentiality in all of our services.

24/7 Customer Support

Our support agents are available 24 hours a day 7 days a week and committed to providing you with the best customer experience. Get in touch whenever you need any assistance.

Try it now!

Calculate the price of your order

Total price:

How it works?

Follow these simple steps to get your paper done

Place your order

Fill in the order form and provide all details of your assignment.

Proceed with the payment

Choose the payment system that suits you most.

Receive the final file

Once your paper is ready, we will email it to you.

Our Services

No need to work on your paper at night. Sleep tight, we will cover your back. We offer all kinds of writing services.


Essay Writing Service

No matter what kind of academic paper you need and how urgent you need it, you are welcome to choose your academic level and the type of your paper at an affordable price. We take care of all your paper needs and give a 24/7 customer care support system.


Admission Essays & Business Writing Help

An admission essay is an essay or other written statement by a candidate, often a potential student enrolling in a college, university, or graduate school. You can be rest assurred that through our service we will write the best admission essay for you.


Editing Support

Our academic writers and editors make the necessary changes to your paper so that it is polished. We also format your document by correctly quoting the sources and creating reference lists in the formats APA, Harvard, MLA, Chicago / Turabian.


Revision Support

If you think your paper could be improved, you can request a review. In this case, your paper will be checked by the writer or assigned to an editor. You can use this option as many times as you see fit. This is free because we want you to be completely satisfied with the service offered.