Project cs 3377 | Computer Science homework help

 Updated 3/29 with project grading %s CS 3377 Project 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: Field Size Type Purpose HEADER NumEntries 4 bytes Integer Tells you how many entries you need to read ENTRY (repeated NumEntries times) Date/Time sizeof(time_t) Time Timestamp (# seconds since 1/1/1970) Item ID Sizeof(int) Integer Item’s code Item Name 50 bytes char* Name of the item sold Item Quantity Sizeof(int) Integer Number sold Item Price Sizeof(float) Float Price of the products 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, worth 20%) 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, worth 20%) 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 (2nd 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 (2nd 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, obviously). 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, worth 30%) 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 Receiving thread Wait on shared condition (for writing thread to be ready) Signal condition to say we’re ready Wait on condition (for an entry to be ready) Update the variable with the next entry Signal the condition Loop around and wait on the condition again Retrieve the info, save it for later writing Loop around and signal the condition again 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, worth 30%) 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 2nd 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  sleep(amountToWait);  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. 

Get 20% Discount on This Paper
Pages (550 words)
Approximate price: -

Try it now!

Get 20% Discount on This Paper

We'll send you the first draft for approval by at
Total price:
$0.00

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

Custom Writings Help is a Quality-Oriented Company in Online Writing as a result of hiring exceptional professionals to execute clients' tasks.

Essays

Research Papers

At Custom Writings Help,We understand the struggle of research paper writing, and that is why at Custom WritingS Help, we are all out to help you. We pride ourselves on having a team of clinical writers. The stringent and rigorous vetting process ensures that only the 'BEST' Writers are chosen for the job. We have highly qualified Ph.D. and MA writers working with us; we equally offer these experienced writers specific bonuses and incentives to make them deliver highly original, unique, and informative content at reasonably low prices.

Admissions

Thesis Writing Service

Worlwide, Many Masters Students are struggling with Thesis Completion. A thesis is likely to be the longest and most challenging piece of work a student has ever completed. However, unlike essays and other assignments, a student can pick a particular interest topic and work on their initiative. Fortunately, we are there for you. At Custom Writings Help, you are assured of an authentic, imaginative, informative, linguistically great, and advantageous thesis that adheres to all your needs. So, why continue considering different writers when you have discovered the best in the field?

Editing

Custom Papers

Not a single student can avoid writing custom papers. However, a total lack of experience, skills, and time makes it very hard to produce a superb writing piece. Therefore, if you are seeking professional help, turn to us. Our specialized and experienced writers compose a variety of model papers, including custom essays, college term papers, research papers, book reports, MBA essays, executive summaries, dissertations, Ph.D. theses, admission essays, and research proposals for college and university students at any level.

Coursework

Essay Writing

Most of the students disregard the critical principles of essay writing and compose papers below sensible guidelines. Therefore, with Custom Writings Help, one should not worry about his/her essay. Our Writers compose informative and engaging content on all complexities and topics. We write meaningful and smart essays while prioritizing all aspects that bring about a good grade, such as impeccable grammar, proper structure, zero-plagiarism, and conformance to guidelines.

Coursework

Coourse Work Writing

Don't let the seemingly never-ending onslaught of writing assignments get you down. If you are looking where to get course work assistance online, the writers at Custom Writings Help are here to assist you with all of your writing needs. We undertake to unique delivery of papers that meet the professor's requirements. The content is proofread, edited, and checked plagiarism before submission to customers. No matter how big or small your work is, we will deliver on time. Try US Now! !

Coursework

Dissertation Writing Service

High-Quality Dissertation Writing Services are rare. They require Ph.D. academicians – not easily found. However, are an exception. The years, time, and resources we have invested in the dissertation world has given us a competitive advantage over others. Choose to come to Custom Writings Help; You will find perfect Ph.D. consultants who have written hundreds of dissertations theses ready to help you. Let our dissertation-writing services help you craft your dissertation, for you are assured we will give you the results.

× How can I help you?