Mark Ainsley, CSUS graduate with ~30 years of software experience across IT, Software QA, Software Development, Software Leadership (roles include Software QA, Software Engineer, Lead Engineer, Manager, Director).
Course: CSC60 – Intro to System Programming Unix (Spring 25, Week 1). Motto: "Whether you think you can or think you can’t – you are right." – Henry Ford
Course Description
Hands-on approach to learn features of the C language commonly used in systems programming and its application in a UNIX environment.
Topics include:
C preprocessor macros
File I/O
Bit-manipulation facilities
Timesharing system concepts
File permissions
Shell script programming
Building C programs via make files
Basic system calls like fork and exec
Pointers and dynamic memory allocation
Libraries and relocation and linking concepts including assembler handling of symbol tables
Prior knowledge assumed: familiarity with a C-like language (Java, C++, C#, Python, …)
Prerequisites: CSC 20, CSC 35
Week 1 – Assignments
Reading:
DigitalOcean – An Introduction to Linux Basics
Linux Foundation – Vim 101: A Beginner's Guide to Vim
Lab:
Lab 1 – Intro to Linux and Vim
Note: Details available on Canvas Assignment for Week 1
Week 1 External References
Course References:
Jacob Sorber Video Series
CodeVault Video Series
Additional References for Week 1:
Medium – Linux Architecture
Technopedia – System Programming
YouTube – The Ultimate Beginner’s Guide to Learn and Master Vim
FreeCodeCamp – Vimrc Configuration Guide
MIT University – Vi Cheat Sheet (or longer reference sheet)
Syllabus Overview
Course Description (as above)
Textbook/External References
Homework/Labs
Quizzes: 3 quizzes, short and in-class
Tests: 1 midterm and 1 Final Exam
Midterm on Canvas, Final Exam in-class on paper
What We'll Learn (Course Scope)
Working in a Linux system and a lot of Linux commands
Linux shells: multiple shells exist (sh, csh, ksh, zsh, bash, …); default login shell on ECS systems is bash; on Mac it may be zsh
Linux architecture at a high level and how to navigate the Linux file system
Creating and editing text files using a native Linux editor, primarily vim (vi)
A broad view of Systems Programming concepts
Hands-on labs/exercises to practice all topics
Some Terminology
Unix: family of proprietary OSs developed in the 1970s at Bell Labs (license required)
Linux: free, open-source version of a Unix kernel developed by Linus Torvalds
Note: “Unix” and “Linux” are often used interchangeably in casual usage, but they are distinct
FTP: File Transfer Protocol (transferring files to/from systems)
Putty: SSH client for Windows to connect to Linux systems
Terminal: Mac application to access the shell/CLI
Accessing Linux (Course Environment)
ECS Linux systems are used for coursework
-Mac users can use macOS terminal for many activities; differences may exist between macOS and ECS Linux versions
Will log into Linux to compile/run C programs, and transfer files between local machine and ECS systems
Using ECS Linux Systems
To use ECS systems, login to a remote ECS system via a terminal
You will need to transfer files between your local system and the ECS system
VPN access via GlobalProtect is required for off-campus access
Coding systems to use:
ecs-pa-coding1.ecs.csus.edu
ecs-pa-coding2.ecs.csus.edu
ecs-pa-coding3.ecs.csus.edu
GlobalProtect VPN
GlobalProtect is a VPN client to access CSUS servers remotely
Install once; connect when:
You are on a non-campus computer, or
You are not connected to the campus network
MacOS Usage for this Course
MacOS is Unix-based and compatible with many activities in this course
To log in from Mac: open a Terminal window and run SSH to ECS coding systems (example below)
File transfers may be unnecessary if Canvas access provides required uploads
General ECS Linux Workflow
Steps to use ECS Linux systems:
Ensure GlobalProtect VPN is active if off-campus
Open a terminal and log into a Linux machine (e.g., via ssh)
Open an editor (vim is common for C projects)
Write/fix code, save, compile, and run the executable
Transfer files between local and ECS systems as needed for Canvas submissions
Keep track of multiple copies to identify the final version