Lecture 1 ● Course webpage ● http://csserver.evansville.edu/~hwang/f15-courses/cs375.html ● Handouts, assignments ● Supplemental resources ● Syllabus and schedule, textbooks ● CS Lab, Virtual Box Thursday, August 27 CS 375 UNIX System Programming - Lecture 1 1 Outline ● What is UNIX? ● What is Linux? ● UNIX programming environment ● Review of compiling C and C++ programs ● Libraries ● References: UCRE, UOVE, BLP Ch. 1 Thursday, August 27 CS 375 UNIX System Programming - Lecture 1 2 What is UNIX? - Features ● A multiuser, multitasking operating system ● UNIX is portable (written in C). ● UNIX is secure (file and process security). ● A UNIX system includes hundreds of utilities, tools, and libraries. Tools for text processing and programming are standard. Thursday, August 27 CS 375 UNIX System Programming - Lecture 1 3 What is UNIX? - Features ● ● ● The TCP/IP protocols (Internet) were developed under UNIX and are now a core part of the OS. While not a core part of the OS, a Graphical User Interface is standard (X Window System or X). The POSIX (portable operating system interface) standards are now used to define UNIX-like systems. Standards define interfaces, shells, tools, security, etc. Thursday, August 27 CS 375 UNIX System Programming - Lecture 1 4 What is UNIX? - History ● ● ● UNIX was developed by Bell Labs (AT&T) in the early 1970s. AT&T gave the source code of the OS to universities and licensed it to many other companies. (Several companies developed their own versions of UNIX.) At Berkeley, several enhancements resulted in Berkeley System Derived (BSD) UNIX. The UNIX trademark belongs to the Open Group. The SCO Group owns the original AT&T source code. Thursday, August 27 CS 375 UNIX System Programming - Lecture 1 5 From: en.wikipedia.org/wiki/History_of_Unix Thursday, August 27 CS 375 UNIX System Programming - Lecture 1 6 What is Linux? - History ● ● Linux is a free, POSIX compatible OS originally written by Linus Torvalds. It was first released in 1991. (Linus was a student in Finland at the time.) It is now maintained and updated by people around the world. The term Linux properly refers to only the kernel of the OS, but usually is used to describe the complete OS (kernel, libraries, core utilities and video support) or distribution. Thursday, August 27 CS 375 UNIX System Programming - Lecture 1 7 What is Linux? - Features ● ● Like most modern OSes Linux supports: true multitasking, threads, virtual memory, shared libraries, demand loading, shared copy-on-write executables, memory management, loadable device driver modules, video frame buffering, and TCP/IP networking Although originally written for the Intel 80386 processor it has been ported to many other processors. Thursday, August 27 CS 375 UNIX System Programming - Lecture 1 8 What is Linux? - Distributions ● ● ● There are several Linux distributions: Red Hat/Fedora, SuSE, Slackware, Arch Linux, Debian, Gentoo, Knoppix, Ubuntu, etc. A distribution consists of the complete Linux OS, plus administration and user applications. An installation program also is included. Distributions provide software in packages along with a package management program. Thursday, August 27 CS 375 UNIX System Programming - Lecture 1 9 UNIX Programming Environments ● CSLAB/csserver (recommended) ● ● ● ● CSLAB/KC267/KC136 dual-boot Linux and Windows. Also remote log on to csserver via ssh. Putty and WinSCP are free ssh and sftp Windows clients. ALL PROGRAMS MUST BE TESTED ON LAB MACHINE BEFORE SUBMISSION!!!!!!!!!!! Thursday, August 27 CS 375 UNIX System Programming - Lecture 1 10 UNIX Programming Environments ● VirtualBox Virtual Machine (recommended) ● Run Linux in a virtual machine. ● Programming, network and administration ● Ubuntu 14.04 installation disk available from instructor Thursday, August 27 CS 375 UNIX System Programming - Lecture 1 11 UNIX Programming Environments ● Install Linux ● ● ● Either stand-alone or dual boot Ubuntu installer can be used to resize a Windows partition to make room for Ubuntu Ubuntu 14.04 installation disk available from instructor Thursday, August 27 CS 375 UNIX System Programming - Lecture 1 12 Compiling C and C++ Programs ● Create source file using a text editor $ emacs first.cpp & #include <iostream> using namespace std; int main () { cout << "CS 375 is off and running!" << endl; return 0; } Thursday, August 27 CS 375 UNIX System Programming - Lecture 1 13 Compiling C and C++ Programs ● Compile and run (or just “make first”) $ g++ ­o first first.cpp $ ./first ● Refer to the man or info pages for info on g++ ● Use the “-v” option to get full details: $ g++ ­v ­o first first.cpp Using built­in specs. Target: i486­linux­gnu Configured with: ../src/configure ... Thursday, August 27 CS 375 UNIX System Programming - Lecture 1 14 PATH Environment Variable ● The PATH variable contains a list of directories that is searched when looking for programs: $ echo $PATH # display PATH /usr/local/sbin:/usr/local/bin:/usr/sbin ... ● A program not in the PATH can be run by using the complete PATHNAME: $ /home/hwang/cs375/examples/first $ ./first # . indicates current directory ● You can add the current directory to the PATH (not recommended): $ PATH=$PATH:. $ first Thursday, August 27 CS 375 UNIX System Programming - Lecture 1 15 Include Files ● Let's build a slightly more complex application: $ emacs second.cpp & #include <iostream> #include "mymath.h" using namespace std; int main () { int a, b, c; cout << "Enter first integer: "; cin >> a; cout << "Enter second integer: "; cin >> b; c = sumtwo (a, b); cout << "Their sum is: " << c << endl; return 0; } Thursday, August 27 CS 375 UNIX System Programming - Lecture 1 16 Include Files ● Here are the other files needed: $ cat mymath.cpp # Source file ­ utility funcs #include "mymath.h" int sumtwo (int x, int y) { return x + y; } $ cat mymath.h # Header file int sumtwo (int x, int y); ● To compile and link: $ g++ ­o second ­I. second.cpp mymath.cpp Thursday, August 27 CS 375 UNIX System Programming - Lecture 1 17 Include Files ● ● g++ automatically looks in the current directory so the “-I.” is optional here. Standard include directories such as /usr/include, /usr/local/include, /usr/include/c++/4.6 are automatically searched. Thursday, August 27 CS 375 UNIX System Programming - Lecture 1 18 UNIX Libraries ● ● ● ● Linux supports static and shared libraries. Shared libraries are used by default. Code from shared libraries is loaded at runtime and may be shared by many applications. Shared libraries are usually located in /lib or /usr/lib and have a .so filename extension. Static libraries are copied into the executable making them much larger, but may be desired if you want to distribute a program in binary form. Use the -static option with g++. Thursday, August 27 CS 375 UNIX System Programming - Lecture 1 19 UNIX Libraries ● Example: Put the sumtwo function into a static library $ g++ ­c mymath.cpp # generate mymath.o object file $ ar rv libmymath.a mymath.o # add obj file to lib $ ranlib libmymath.a # not required under Linux $ g++ ­o second second.cpp ­L. ­lmymath ● ● ­L. option (required) tells g++ to look in the current directory for libraries. ­lmypath tells g++ to open the library name libmypath.a gcc automatically looks in standard directories for libraries: /usr/lib, /usr/local/lib Thursday, August 27 CS 375 UNIX System Programming - Lecture 1 20 UNIX Libraries ● The ar utility is used to create, extract, list, and add modules to libraries. $ ar t /usr/lib/i386­linux­gnu/libm.a # List modules in math lib $ ar x libmymath.a mymath.o # Extract obj file ● The nm utility can be used to list all of the symbols in a library, object file, or executable. $ nm ­C libmymath.a $ nm ­C mymath.o $ nm ­C second Thursday, August 27 CS 375 UNIX System Programming - Lecture 1 21 UNIX Libraries ● The ldd utility will list the shared libraries required by a program: $ ldd /bin/ls linux­gate.so.1 => (0xb774b000) UCRE, UOVE librt.so.1 => /lib/tls/i686/cmov/librt.so.1 ... ... $ ldd second linux­gate.so.1 => (0xb77d7000) libstdc++.so.6 => /usr/lib/libstdc++.so.6 ... libm.so.6 => /lib/tls/i686/cmov/libm.so.6 ... ... ● ldconfig is used by the administrator to make shared libraries available to others on the system. Thursday, August 27 CS 375 UNIX System Programming - Lecture 1 22