Lecture # 17 - Systems and Network Programming

*** Midterm today ***

House keeping items:

Agenda for Today (03/11/20):

Lecture # 16 Notes:

*** Complete Midterm during class ***

Notes and lecture material for next class...

    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)
    *** Action Items for Next Class ***
    • H/W # 8 posted: due Friday: 03/13
    • C/C++ programming