Lecture # 18 - Systems and Network Programming

House keeping items:

Lecture 18 (Section 1 and 2) Video Recordings

Agenda for Today (03/23/20):

Lecture # 18 Notes:

System calls: open, read, write, fork, exec

  1. exec syscall example - demonstrates the exec system call: "exec" is a process loader, and used to load a different process image, into the context of an existing processs. This examples load the /bin/ls process image into the existing "exec_example" process
  2. fork and exec example - this example demonstrates a very simple shell concept using fork and exec to spawn and run commands in child processes
  3. Download fork, exec examples here

Project 1 helpers: *** Please See Updated Project Statement *** Project1 statement

***Note:*** I’ve given lots of help.
All you should really need do to complete Project 1 is implement the two functions: DoProcessExternalCommand, DoProcessBuiltInCommand in minShell.cpp, which handle the set and show shell variables (built-in copmmands), and executing external programs respectively. View the test stubs in Process.cpp and Command Manager.cpp to see how you might implement these functions.
You are not required to use my helper code! You can build all of your own code, but you do need to meet all of requirements specified in the Project statement (see helper code below).

  1. Process: package runs external programs by creating processes (fork and exec): see interface(.h) and test stub in (.cpp) file.
  2. CommandManager: package supports creation and management of shell variables, and provides searching a user specified path variable for programs stored in the filesystem
  3. minShell executive - implements the minShell solution, using the services of the Process and CommandManager packages
  4. An example of what your complete minShell output should look like
  5. Download the Project1 Helper Code Here

C/C++ examples: System calls, serialization, files and I/O

    1. USNA (Systems Programming) lectures
    1. User/Kernel space, System call Overview
    2. File I/O: read, write, open system calls
    3. Process creation and termination: I/O buffering
    4. Fork, Exec system calls, Process management
    5. Process Scheduling
    2. Previous (Lecture 15) Notes and C/C++ Presentation Materials
    1. C/C++ Introduction: Mike C. notes
    2. C++ Survival Guide (basic syntax notes and important concepts): Dr. Fawcett
    3. C and C++ compilation, memory, and computation models
    4. Assessment of the C++
    5. Discussion on the elements that comprise C and C++
    6. Discussion on Packages and Modularity
    7. Important linux/system header files
    8. The structure and data flow in sytems is often documented with standard UML diagramming: You should be aware of it
    3. Code Examples from 03/02 and 03/04
    1. Demo stdout/stderr file streams, write system call
    2. Demo Pass by value, Pass by reference, basic pointers and memory allocation (new/delete, malloc/free)
    3. Demo C-style strings
    4. Demo C++ std::strings
    5. Demo File I/O in C (fopen/fgetc/fprintf,read lines, memory allocation with malloc etc.) Reading/Writing Text Files: C example
    6. Demo File I/O in C++ (ifsteam/ofstream streams: Reading/Writing Text Files: C++ example
    7. Demo structs, serialization, reading/writing binary files: C++ example
    8. Demo reading/writing binary files in C (glibc: fopen/fread/fwrite/fseek etc) C example
    9. Demo reading/writing binary files in C++ (fstream library: command line args, ifstream/oftstream etc.) C example
    4. Type Serialization/Deserialization example 5. C Package example for HW # 7 6. Example of a real C++ package - supports linux file and directory operations (prior to C++ 17 file system) 7. Lecture 14 Examples: Download
  • Note: You will need C and C++ compilers
    • I will use GNU C/C++ (gcc/g++). The Linux Minit distro comes with gcc installed by default, but not g++
    • Install g++ with the following command (Open terminal and type): sudo apt-get install g++
    • You can install and use gcc/g++ on your Mac computer. Use this is option if you don't have a Linux distro
  • Code (C and C++ tutorial) Resources:

    1. Really Nice C tutorial
    2. Excellent C Programming Tutorial: Tutorialpoint
    3. Another Excellent C Programming Tutorial(divided in basic and advanced topics): Learn-C.org
    4. One of the best C++ tutorials I've seen: cpluspluss.com
    5. Dr. Fawcett's Page on Getting Started with C++
    6. A very good C++ tutorial: LearnCpp.com
    7. Program memory layout
    8. Pointers Tutorial
    9. Stat system call
    10. Stat man page
    11. Compiling Programs using make (chapter 23): linux command line
    12. Lectures from a well thought out systems programming course at USNA
    13. Compilation, Linking and Loading article
    14. A series of Systems Programming lectures from U.S. Naval Academy (USNA)

    Dr. Fawcett's developed resources:

    Dr. Fawcett taught graduate software design courses here at Syracuse from 1990 - Spring 2019. Most of my software training was here at SU in Dr. Fawcett's courses from 2005-2019. In retirement he is continuing to develop (current) software training materials, most of which is hosted in his new github website available via the URLs below.

    1. The C++ story provides detailed coverage of the C++ language: specifically how to utilize the language and its features effectively. The intent of the story is to meet people on individual level of experience. Beginning C++ programmers can begin to get handle on using the language, while experienced programmers can get detailed insight into the more advanced aspects.
      View the C++ story here

    2. A series of the C++ videos corresponding to the C++ story
      can be viewed here

    3. Previously taught (Spring 2019) graduate Object-oriented Design course using C++

    Environment Setup Notes:

    1. Install VirtualBox
    2. Install Linux Mint (based on Ubuntu -- I prefer MATE desktop, but many people like Cinnamon)
      • Desktop Comparisons: MATE versus Cinnamon
      • Install Guest Additions - device drivers and system applications that optimize the guest operating system for better performance and usability.
    3. Enable "Shared Clipboard and Drag'nDrop": Settings -> Advanced
    4. Configure shared folders, then run the following commands..
      1. run: sudo usermod -a -G vboxsf `whoami`
      2. run: sudo chown -R `whoami`:users name-of-mount-point
      3. log out, and log back in
    5. Update Mint (run): "sudo apt update && sudo apt upgrade -y"

    Interesting Technologies related to Linux:

    1. Kernel-based Virtual Machine (KVM) - turn Linux into a Hypervisor
    2. Docker (Container Technology)
    3. TCPDump & LIBPCAP
    4. Extended Berkeley Packet Filter (eBPF)