Lecture # 15 - Systems and Network Programming

Files (I/O), serialization, memory allocation, pointers, pass by reference, pass by value in C/C++

House keeping items:

Agenda for Today (03/04/20):

Lecture # 15 Notes:

Discuss and Demonstrate facilities for file I/O in C using the standard C libray (glibc), and the standard C++ facilities for I/O: ifstream, and ofstreams. Discuss and demo memory allocation, serialization, and buffered I/O examples

  1. Notes and 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
    Code Examples 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
    10. Demo buffered I/O in C : write the cp program
    11. Demo buffered I/O in C++ : write the cp program
    12. Demo/discuss C Package example for HW # 7
    13. Example of a real C++ package - supports linux file and directory operations (prior to C++ 17 file system)
    14. Download lecture14 examples
    15. Books Package example (C version), same as that in lecture13_examples.tar.gz
  2. 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 Weds: 03/11
  • C/C++ programming