Course catalog description: Advanced programming with a focus on developing software for networked systems using Linux as a reference platform. Topics: Programming Tools, Software Design, Environment of a UNIX Process, Memory Allocation, Garbage Collection, Process Control, Process Relationships, Signals, Reliable Signals, Threads, I/O Multiplexing, Datagram and Stream Sockets, Multicasting, Device Driver and Kernel Programming, Secure Programming.
Credits and contact hours: 3 credits; 1 hour and 20-minute session twice a week, every week
Pre-Requisite courses: 14:332:351
Co-Requisite courses: None
Topics Covered:
- Course Introduction; Unix Programming Environment: Build Systems, Configuration Management, Debuggers
- Unix I/O: Standard I/O library, I/O system calls, redirection; Manipulating files and directories, File Access Control.
- File access over the HTTP Protocol; Sockets Network Programming: Stream and Datagram sockets; Process Address Space and Environment, Process Control and Relationships.
- Basic and Reliable Signals
- Server design
- Threads, synchronization primitives, I/O Multiplexing, hourly exam
- Broadcasting and Multicasting
- Device Drivers: Interrupt Handling, Char, Block, and Network Drivers, Kernel Development.
- Secure Programming: Access Control, Buffer Overflow, Covert Channels, Secure Sockets
- Network Programming in Java, Remote Procedure Calls
Textbook: W. R. Stevens, B. Fenner, A. M. Rudoff, Unix Network Programming, Vol. 1: The Sockets Networking API, Addison-Wesley.
Other supplemental material: W. R. Stevens and S. Rago, Advanced Programming in the UNIX(R) Environment, Addison-Wesley.