introduction to unix
TRANSCRIPT
UNIX Intro. 1
Introduction to UNIXIntroduction to UNIX
ObjectivesObjectives– Motivate the use of UNIXMotivate the use of UNIX– Introduce basic UNIX featuresIntroduce basic UNIX features
(e.g. using directories, files)(e.g. using directories, files)– Introduce Introduce vivi
March 1997
UNIX Intro. 2
ContentsContents
1. 1. Background on UNIXBackground on UNIX
2. 2. Starting / FinishingStarting / Finishing
3. 3. Typing UNIX CommandsTyping UNIX Commands
4. 4. Commands to Use Right AwayCommands to Use Right Away
5. 5. UNIX helpUNIX help
continued
UNIX Intro. 3
6.6. The UNIX File SystemThe UNIX File System
7. 7. Working with DirectoriesWorking with Directories
8. 8. Working with FilesWorking with Files99.. vivi
UNIX Intro. 4
1. Background on UNIX1. Background on UNIX
1.1. 1.1. What is UNIX?What is UNIX?
1.2. 1.2. HistoryHistory
1.3. 1.3. Why use UNIX?Why use UNIX?
UNIX Intro. 5
•1.1. What is UNIX?1.1. What is UNIX?
The UNIX Operating System (OS) is a The UNIX Operating System (OS) is a large program (mostly coded in C) that large program (mostly coded in C) that turns the computer into a useable machine.turns the computer into a useable machine.
It provides a number of facilities:It provides a number of facilities:– management of hardware resourcesmanagement of hardware resources– directory and file systemdirectory and file system– loading / execution / suspension of programsloading / execution / suspension of programs
UNIX Intro. 6
1.2. (Brief) History1.2. (Brief) History
1969 1969 First UNIX at Bell LabsFirst UNIX at Bell Labs 19751975 Bell Labs makes UNIX freewareBell Labs makes UNIX freeware 1970’s1970’s Berkeley UNIX (BSD)Berkeley UNIX (BSD) 1980’s1980’s TCP/IPTCP/IP
MIT X-WindowsMIT X-Windows 1990’s1990’s The Web,The Web,
LINUXLINUX
UNIX Intro. 7
1.3. Why Use UNIX?1.3. Why Use UNIX?
multi-tasking / multi-usermulti-tasking / multi-user lots of softwarelots of software networking capabilitynetworking capability graphical (with command line)graphical (with command line) easy to program easy to program portable (PCs, mainframes, portable (PCs, mainframes,
super-computers)super-computers)continued
UNIX Intro. 8
free! (LINUX, FreeBSD, GNU)free! (LINUX, FreeBSD, GNU) popularpopular profitableprofitable
1996 Sales: US$34.5 Billion, up 12%1996 Sales: US$34.5 Billion, up 12% not tied to one companynot tied to one company active communityactive community
UNIX Intro. 9
2. Starting / Finishing2. Starting / Finishing
2.1. 2.1. Your AccountYour Account
2.2. 2.2. Login to your AccountLogin to your Account
2.3. 2.3. Password TipsPassword Tips
2.4. 2.4. Logout from your AccountLogout from your Account
UNIX Intro. 10
2.1. Your Account2.1. Your Account
Each user has their own space on Each user has their own space on fivedotsfivedots, , called their called their account.account.
Type your login ID and password to enter Type your login ID and password to enter your account.your account.
Only if the login ID and password match Only if the login ID and password match will you be let in.will you be let in.
UNIX Intro. 11
2.2. Login to your Account2.2. Login to your Account
login: login: adad You type your ID and You type your ID and RETURNRETURN..
Password:Password: You type your password and You type your password and RETURNRETURN. It does not appear.. It does not appear.
$$ The UNIX prompt (or similar). The UNIX prompt (or similar). You can now enter commands.You can now enter commands.
UNIX Intro. 12
2.3. Password Tips2.3. Password Tips
NEVERNEVER tell anyone your password. tell anyone your password. Don’t write it down.Don’t write it down. A good password is:A good password is:
– 8 (or more) characters long8 (or more) characters long– uses a mix of uppercase and lowercase letters, uses a mix of uppercase and lowercase letters,
numbers, and symbols (e.g. #, %).numbers, and symbols (e.g. #, %). You can change your password with the You can change your password with the passwdpasswd command (see later).command (see later).
UNIX Intro. 13
2.4. Logout from your Account2.4. Logout from your Account
logoutlogout
oror
^D^D Press Press CONTROL CONTROL and and DD togethertogether
ororexitexit
UNIX Intro. 14
3. Typing UNIX Commands3. Typing UNIX Commands
3.1. 3.1. The ShellThe Shell
3.2.3.2. Typing CommandsTyping Commands
3.3. 3.3. Control CharactersControl Characters
3.4.3.4. Changing your PasswordChanging your Password
UNIX Intro. 15
3.1. The Shell3.1. The Shell
The UNIX user interface is called the The UNIX user interface is called the shellshell.. The shell does 4 jobs repeatedly:The shell does 4 jobs repeatedly:
displayprompt
executecommand
processcommand
readcommand the shell
UNIX Intro. 16
3.2. Typing Commands3.2. Typing Commands
Try these:Try these:datedate
cal 3 1997cal 3 1997
whowho
ls -als -a
man calman cal Press spacebar to continue; Press spacebar to continue; ^C (^C (CONTROL CONTROL and C) and C)
to stopto stopclearclear
UNIX Intro. 17
3.3. Control Characters3.3. Control Characters
Erasing charactersErasing charactersDELETEDELETE delete last characterdelete last character
^H^H delete last characterdelete last character(press (press CONTROL CONTROL and H and H
together).together).
^W^W delete last worddelete last word
^U^U delete the linedelete the line
UNIX Intro. 18
Very useful control charactersVery useful control characters
^C^C terminate commandterminate command
^S^S suspend outputsuspend output
^Q^Q resume outputresume output
UNIX Intro. 19
Special Characters can be AlteredSpecial Characters can be Altered
Show current settings:Show current settings:stty -allstty -all
Change a setting:Change a setting:stty erase ^?stty erase ^? Type Type ^̂ and and ??. .
Reset:Reset:stty sanestty sane
UNIX Intro. 20
3.4. Changing your Password3.4. Changing your Password
The command is:The command is:passwdpasswd
It will ask you for the new password twice.It will ask you for the new password twice.
UNIX Intro. 21
4. Command to Use Right Away4. Command to Use Right Away
4.1. 4.1. Date CommandsDate Commands
4.2. 4.2. You and the SystemYou and the System
4.3. 4.3. CalculatorsCalculators
4.4. 4.4. GamesGames
UNIX Intro. 22
4.1. Date Commands4.1. Date Commands
datedate Gives time and dateGives time and date
calcal CalendarCalendarcal 1997cal 1997
cal 3cal 3
cal 7 1962cal 7 1962
cal 9 1752cal 9 1752 Not a mistake. Why?Not a mistake. Why?
UNIX Intro. 23
4.2. You and the System4.2. You and the System
uptimeuptime Machine’s ‘up’ timeMachine’s ‘up’ time hostnamehostname Name of the machineName of the machine
whoamiwhoami Your nameYour name quotaquota Your quotasYour quotas
quota -vquota -v
UNIX Intro. 24
4.3. Calculators4.3. Calculators
xcalcxcalc Requires X-WindowsRequires X-Windows
expr expr ee Simple arithmeticSimple arithmeticexpr 3 + 5 + 7expr 3 + 5 + 7
bcbc Programmable Programmable Calculator Calculator
UNIX Intro. 25
Using bcUsing bc
bcbc3 + 5 + 73 + 5 + 7
1717 OutputOutput^D^D
bc -lbc -l Use Maths libraryUse Maths libraryscale=3scale=3 Set display to 3 dpSet display to 3 dp150/60150/60l(30)l(30) natural log functionnatural log function^D^D
UNIX Intro. 26
bcbcobase=2obase=2 Output baseOutput baseibase=16ibase=16 Input baseInput baseFFC1FFC1^D^D
UNIX Intro. 27
5. UNIX Help5. UNIX Help
5.1. 5.1. On-line HelpOn-line Help
5.2. 5.2. UNIX booksUNIX books
UNIX Intro. 28
5.1. On-line Help5.1. On-line Help
manman Manual pagesManual pages Spacebar to go on; Spacebar to go on; ^C ^C to stopto stop
man gnuchessman gnuchess
man manman man
apropos apropos topictopic Lists commands Lists commands related to related to topictopic
apropos gameapropos game
apropos helpapropos help
UNIX Intro. 29
man -k man -k topictopic Same as Same as aproposapropos
whatis whatis cmdcmd One-line descriptionOne-line descriptionwhatis nethackwhatis nethack
where where cmdcmd Location of Location of commandcommand
which which cmdcmd LocationLocation
UNIX Intro. 30
locate locate cmdcmd List files with List files with cmdcmd in in their name (or path)their name (or path)
locate gamelocate game
Output of these commands can be very Output of these commands can be very long. See a screenful at a time with: long. See a screenful at a time with: | more| more
locate game | morelocate game | more
apropos print | moreapropos print | more
Press spacebar to go on; Press spacebar to go on; ^C ^C to stop.to stop.
UNIX Intro. 31
5.3. UNIX Books5.3. UNIX Books A Student’s Guide to UNIXA Student’s Guide to UNIX, Harley Hahn, , Harley Hahn,
McGraw-Hill, 1993.McGraw-Hill, 1993.
A Practical Guide to the UNIX SystemA Practical Guide to the UNIX System , , Mark G. Sobell, Benjamin-Cummings, Mark G. Sobell, Benjamin-Cummings, 3rd Edition, 1995.3rd Edition, 1995.
An Introduction to Berkeley UNIXAn Introduction to Berkeley UNIX, , Paul Wang, Wadsworth, 1992.Paul Wang, Wadsworth, 1992.
UNIX Intro. 32
6. The UNIX File System6. The UNIX File System
6.1. 6.1. An upside-down TreeAn upside-down Tree
6.2. 6.2. Some System DirectoriesSome System Directories
6.3. 6.3. Where do you login?Where do you login?
6.4. 6.4. PathnamesPathnames
6.5.6.5. Commands and PathnamesCommands and Pathnames
UNIX Intro. 33
6.1. An upside-down Tree6.1. An upside-down Tree A simplified UNIX directory/file system:A simplified UNIX directory/file system:
/
etc bin export
home
user
ad s3910120
dev tmp
exam.txt work hobby.c proj1
date cal. . .
. . . . .
. .
. . .
. . . . . .. . .
. . .
UNIX Intro. 34
6.2. Some System Directories6.2. Some System Directories
// rootroot directory directory
/bin/bin commandscommands
/etc/etc system data filessystem data files(e.g. (e.g. /etc/passwd/etc/passwd))
/dev/dev files representing I/O devicesfiles representing I/O devices
UNIX Intro. 35
6.3. Where do you login?6.3. Where do you login? Your Your home directoryhome directory, which is named after , which is named after
your login ID. your login ID. /
s3910120
hobby.c proj1
export
home
user
s3910120’shome dir.
. . .
UNIX Intro. 36
6.4. Pathnames6.4. Pathnames
A A pathnamepathname is a sequence of directory is a sequence of directory names (separated by /’s) which identifies names (separated by /’s) which identifies the location of a directory.the location of a directory.
There are two sorts of pathnamesThere are two sorts of pathnames– absolute pathnamesabsolute pathnames– relative pathnamerelative pathname
UNIX Intro. 37
Absolute PathnamesAbsolute Pathnames
The sequence of directory names between The sequence of directory names between the top of the tree (the the top of the tree (the rootroot) and the ) and the directory of interest. directory of interest.
For example:For example:/bin/bin
/etc/terminfo/etc/terminfo
/export/user/home/ad/export/user/home/ad
/export/user/home/s3910120/proj1/export/user/home/s3910120/proj1
UNIX Intro. 38
Relative PathnamesRelative Pathnames The sequence of directory names The sequence of directory names belowbelow the the
directory where you are now to the directory directory where you are now to the directory of interest. of interest.
If you are interested in the directory If you are interested in the directory proj1proj1::proj1proj1 if you are in if you are in s3910120s3910120
s3910120/proj1s3910120/proj1 if you are in if you are in homehome
home/s3910120/proj1home/s3910120/proj1 if you are in if you are in useruser
UNIX Intro. 39
7. Working with Directories7. Working with Directories
7.1. 7.1. Moving between DirectoriesMoving between Directories
7.2. 7.2. Special Directory NamesSpecial Directory Names
7.3. 7.3. Investigate the SystemInvestigate the System
7.4. 7.4. Making / Deleting / Renaming Making / Deleting / Renaming DirectoriesDirectories
UNIX Intro. 40
7.1. Moving between Directories7.1. Moving between Directories
s3910120’s home directory:s3910120’s home directory:
s3910120
hobby.c proj1
. . .
proj2
. . .
UNIX Intro. 41
If you are in directory If you are in directory s3910120s3910120 how do how do you move to directory you move to directory proj1proj1??cd proj1cd proj1
You are now in You are now in proj1proj1. This is called the . This is called the current working directorycurrent working directory..
UNIX Intro. 42
pwdpwd Print name of current Print name of current working directoryworking directory
Move back to directory Move back to directory s3910120s3910120 (the (the parent directory):parent directory):cd ..cd ..
UNIX Intro. 43
When in When in proj1proj1, move to , move to proj2proj2 with one with one command:command:cd ../proj2cd ../proj2
../proj2 ../proj2 is a is a relativerelative pathname pathname
UNIX Intro. 44
7.2. Special Directory Names7.2. Special Directory Names
// The root directoryThe root directory .. The current working The current working
directorydirectory .... The parent directory The parent directory
(of your current directory)(of your current directory) ~~ Your home directoryYour home directory ~user~user Home directory of Home directory of useruser
UNIX Intro. 45
ExamplesExamples
cd /cd / Change to root directoryChange to root directory cd ~cd ~ Change to home directoryChange to home directory cdcd (Special case; means (Special case; means cd ~cd ~)) cd ~adcd ~ad Change to my home dir.Change to my home dir. cd ../..cd ../.. Go up two levels.Go up two levels.
UNIX Intro. 46
7.3. Investigate the System7.3. Investigate the System
Use Use cdcd cat filecat file List List filefile
cd /etccd /etc
cat passwdcat passwd
lsls Directory listingDirectory listinglsls List current dir.List current dir.
ls /etcls /etc List List /etc/etc
ls -Fls -F -F option shows types-F option shows types
UNIX Intro. 47
7.4. Making / Deleting / 7.4. Making / Deleting / Renaming DirectoriesRenaming Directories
Usually, you can only create directories (or Usually, you can only create directories (or delete or rename them) in your home delete or rename them) in your home directory or directories below it.directory or directories below it.
mkdirmkdir Make a directoryMake a directory
rmdirrmdir Delete a directoryDelete a directory
mvmv Rename a directoryRename a directory
UNIX Intro. 48
Create a Create a lablab directory in your home directory:directory in your home directory:cd ~cd ~
mkdir labmkdir lab
Create two directories inside the Create two directories inside the lablab directory:directory:cd labcd lab
mkdir week1mkdir week1
mkdir week2mkdir week2
UNIX Intro. 49
Delete the Delete the week1week1 directory:directory:rmdir week1rmdir week1
Change the name of Change the name of week2week2 to to all-weeksall-weeksmv week2 all-weeksmv week2 all-weeks
UNIX Intro. 50
8. Working with Files8. Working with Files
8.1. 8.1. Creating a Text FileCreating a Text File
8.2. 8.2. Listing FilesListing Files
8.3. 8.3. Filename ConventionsFilename Conventions
8.4. 8.4. Other Basic CommandsOther Basic Commands
8.5. 8.5. PrintingPrinting
8.6. 8.6. I/O RedirectionI/O Redirection
UNIX Intro. 51
8.1. Creating a Text File8.1. Creating a Text File
A quick way:A quick way:cat > filecat > file
This will feed the text you type at the keyboard This will feed the text you type at the keyboard into into filefile until you type until you type ^D ^D ((CONTROL CONTROL and a D and a D together).together).
A more powerful way is to use A more powerful way is to use vivi, a full screen , a full screen editor (see later).editor (see later).
UNIX Intro. 52
8.2. Listing Files8.2. Listing Files
cat file cat file List the fileList the filecat hobby.ccat hobby.c
cat /etc/passwdcat /etc/passwd
cat /usr/dict/wordscat /usr/dict/words ((^C ^C to stop)to stop)
more filemore file List the file a screen at List the file a screen at a time. Type spacebar a time. Type spacebar to go on; to go on; ^C ^C to stopto stop
UNIX Intro. 53
less fileless file Like Like moremore but more but more powerfulpowerful
head filehead file List the List the firstfirst few lines few lines
tail filetail file List the List the lastlast few lines few lines
UNIX Intro. 54
8.3. Filename Conventions8.3. Filename Conventions
Many files have a name and an extension:Many files have a name and an extension:file.cfile.c A C programA C program
file.cppfile.cpp A C++ programA C++ program
file.txtfile.txt A text fileA text file
However, you can call a file However, you can call a file anythinganything. It . It doesn’t have to have an extension.doesn’t have to have an extension.
UNIX Intro. 55
8.4. Other Basic Commands8.4. Other Basic Commands
cp file1 file2cp file1 file2 Copy Copy file1file1, , making making file2file2
mv file1 file2mv file1 file2 Rename Rename file1file1 as as file2file2
rm filerm file Delete Delete filefile
rm -i filerm -i file Double-check firstDouble-check first
UNIX Intro. 56
wc filewc file Counts the lines, Counts the lines, words, words,
characters characters in in filefile
grep string filegrep string file Search Search filefile for for stringstring
UNIX Intro. 57
List lines containing ‘Andrew’ in List lines containing ‘Andrew’ in /etc/passwd/etc/passwd
grep Andrew /etc/passwdgrep Andrew /etc/passwd
Lines containing ‘printf(‘ in Lines containing ‘printf(‘ in hobby.chobby.c
grep grep ‘‘printf(printf(‘‘ hobby.c hobby.c
Lines Lines startingstarting with ‘loca’ in with ‘loca’ in /usr/dict/words/usr/dict/words
grep grep ^̂loca /usr/dict/wordsloca /usr/dict/words
UNIX Intro. 58
8.5. Printing8.5. Printing
lpr filelpr file Print Print filefile
lpqlpq List the print queue. List the print queue. Each print job has a Each print job has a number.number.
lprm job-numberlprm job-number Remove that Remove that print jobprint job
UNIX Intro. 59
You may have to name the printer with You may have to name the printer with the the -P -P option:option:lpr -Plj5 hobby.clpr -Plj5 hobby.c
lpqlpq and and lprmlprm understand the understand the -P -P optionoption
UNIX Intro. 60
8.6. I/O Redirection8.6. I/O Redirection
Most commands output to the screenMost commands output to the screenlsls
Output can be Output can be redirectedredirected to a file with to a file with‘>‘‘>‘::ls > dir.txtls > dir.txt
cal 1997 > year1997cal 1997 > year1997
Output can be Output can be appendedappended to a file with to a file with ‘>>‘‘>>‘cal 1997 > yearscal 1997 > years
cal 1998 >> yearscal 1998 >> years
UNIX Intro. 61
Concatenate two files:Concatenate two files:cat f1 f2 > fscat f1 f2 > fs
Input redirection (less common) uses ‘<‘Input redirection (less common) uses ‘<‘wc < yearswc < years
Combine input and output redirection:Combine input and output redirection:wc < years > year-countswc < years > year-counts
UNIX Intro. 62
10. 10. vivi vivi is the standard UNIX text editoris the standard UNIX text editor
ContentsContents
1.1. Why use Why use vivi??
2.2. vivi BasicsBasics
3.3. Moving AroundMoving Around
4.4. Inserting TextInserting Text
UNIX Intro. 63
5.5. DeletionDeletion
6.6. Cut & PasteCut & Paste
7.7. File-related CommandsFile-related Commands
8.8. Text SubstitutionText Substitution
UNIX Intro. 64
1. Why use vi?1. Why use vi?
very powerfulvery powerful useful simple subset of commandsuseful simple subset of commands portable (PCs, mainframes, etc.)portable (PCs, mainframes, etc.) designed for slow networksdesigned for slow networks full-screenfull-screen
UNIX Intro. 65
2. vi Basics2. vi Basics
2.1.2.1. Starting viStarting vi
2.2.2.2. Two ModesTwo Modes
2.3.2.3. The vi WindowThe vi Window
2.4.2.4. When to type When to type RETURNRETURN
2.5.2.5. Finishing a vi SessionFinishing a vi Session
UNIX Intro. 66
2.1. Starting vi2.1. Starting vi
vi filevi file Start editing Start editing filefile
Changes are stored in a buffer, so you must Changes are stored in a buffer, so you must save to change the file. save to change the file.
If the machine crashes, the buffer can If the machine crashes, the buffer can usually be recovered (see later).usually be recovered (see later).
UNIX Intro. 67
2.2. Two Modes2.2. Two Modes Command modeCommand mode
– move cursor, save, delete text, quit vi, etc.move cursor, save, delete text, quit vi, etc.
Input modeInput mode– for inserting textfor inserting text– start by typing i; finish with start by typing i; finish with ESCESC
– cannot quit, delete, etc. in this modecannot quit, delete, etc. in this mode
– If in doubt, press If in doubt, press ESCESC a few timesa few times. This will put you . This will put you back in command mode.back in command mode.
UNIX Intro. 68
2.3. The vi Window2.3. The vi Window
Bottom line is the Bottom line is the statusstatus line line
Some, Some, butbut not allnot all, commands are shown on , commands are shown on the status line.the status line.
Often you type a command and nothing Often you type a command and nothing appears on the screen!appears on the screen!
UNIX Intro. 69
ColonColon commands (e.g. commands (e.g. :q!:q!) and ) and searchsearch commands (e.g. commands (e.g. /text/text) require a ) require a RETURNRETURN..
Commands that start with a Commands that start with a letterletter (e.g. (e.g. ZZZZ, , GG) and control characters (e.g. ) and control characters (e.g. ^L^L) ) do do notnot require a require a RETURNRETURN
2.4. When to type 2.4. When to type RETURNRETURN
UNIX Intro. 70
2.5. Finishing a vi Session2.5. Finishing a vi Session
Get to command mode (press Get to command mode (press ESCESCs)s)
ZZZZ save changes to the file and quitsave changes to the file and quit(no (no RETURNRETURN))
:q!:q! quit without savingquit without saving(press (press RETURNRETURN))
UNIX Intro. 71
3. Moving Around3. Moving Around
3.1.3.1. Basic Cursor MovementsBasic Cursor Movements
3.2.3.2. Larger MovesLarger Moves
UNIX Intro. 72
3.1. Basic Cursor Movements3.1. Basic Cursor Movements
hh move cursor one place to leftmove cursor one place to left
jj down onedown one
kk up oneup one
ll right oneright one
ww move forward one wordmove forward one word
bb back one wordback one word
No RETURNrequired!
UNIX Intro. 73
3.2. Larger Moves3.2. Larger Moves
GG go to last linego to last line<number>G<number>G go to line go to line numbernumber
10G10G
^G^G shows the current line numbershows the current line number
^F^F Forward a screenForward a screen^B^B Back a screenBack a screen
UNIX Intro. 74
/text/text Search forward for Search forward for texttext
/func/func search for search for funcfunc
/printf(/printf( search for search for printf(printf(
//^̂foofoo search for search for foofoo at start of line at start of line
Type RETURN!
UNIX Intro. 75
4. Inserting Text4. Inserting Text
Move to insertion pointMove to insertion point
Switch to input mode:Switch to input mode: i i
Start typing; Start typing; BACKSPACE BACKSPACE or or DELETE DELETE
for deletionfor deletion
ESCESC finish; back in command modefinish; back in command mode
No RETURN
UNIX Intro. 76
Over a slow network, the screen may not Over a slow network, the screen may not refresh properlyrefresh properly
^L^L refresh screen (in command mode)refresh screen (in command mode)
UNIX Intro. 77
5. Deletion5. Deletion
Must be in command mode.Must be in command mode.
xx Delete Delete charactercharacter that cursor is on. that cursor is on.
dddd Delete current Delete current lineline..
DD Delete from cursor position Delete from cursor position to to end of lineend of line
uu UndoUndo last command last command
UNIX Intro. 78
:i,jd:i,jd Delete lines i to jDelete lines i to j:23,29d:23,29d Delete lines 23 to 29Delete lines 23 to 29
Special line numbers:Special line numbers:.. means the current line numbermeans the current line number
^̂ means line number 1means line number 1
$$ means last linemeans last line
:.,$d:.,$d Delete from current line Delete from current line to the end of file.to the end of file.
UNIX Intro. 79
6. Cut & Paste6. Cut & Paste
6.1.6.1. Cut & Paste MeaningCut & Paste Meaning
6.2.6.2. Cut & Paste with Deleted TextCut & Paste with Deleted Text
6.3.6.3. Moving TextMoving Text
UNIX Intro. 80
6.1. Cut & Paste Meaning6.1. Cut & Paste Meaning
CutCut commands remove text from the commands remove text from the screen, and store it in a bufferscreen, and store it in a buffer
PastePaste commands copy text from the commands copy text from the buffer to the screenbuffer to the screen
UNIX Intro. 81
6.2. Cut & Paste with Deleted 6.2. Cut & Paste with Deleted TextText
d or dd or D d or dd or D delete from screen and delete from screen and store text in a bufferstore text in a buffer
move cursor to new locationmove cursor to new location
pp paste contents of buffer paste contents of buffer to right of cursor posnto right of cursor posn
UNIX Intro. 82
6.3. Moving Text6.3. Moving Text Cut and Paste with moveCut and Paste with move
:i,j:i,jmmkk move lines i through j to move lines i through j to start after line kstart after line k
:3,8m10:3,8m10 move lines 3 to 8 to start after line 10move lines 3 to 8 to start after line 10
:20m.:20m. move line 20 to after the current linemove line 20 to after the current line
:1,.m$:1,.m$ move lines 1 through current line move lines 1 through current line to the bottomto the bottom
UNIX Intro. 83
7. File-related Commands7. File-related Commands
:w file:w file writes writes vivi contents to contents to newnew file file:w >> file:w >> file appends to fileappends to file
:w! file:w! file writes over filewrites over file:w!:w! writes over input filewrites over input file
:r file:r file read in file; places it starting read in file; places it starting at current cursor positionat current cursor position
UNIX Intro. 84
UNIX Intro. 85
The C LanguageThe C Language
UNIX Intro. 86
The C LanguageThe C Language
Currently, the most commonly-used Currently, the most commonly-used language for embedded systemslanguage for embedded systems
““High-level assembly”High-level assembly” Very portable: compilers exist for virtually Very portable: compilers exist for virtually
every processorevery processor Easy-to-understand compilation Easy-to-understand compilation Produces efficient codeProduces efficient code Fairly conciseFairly concise
UNIX Intro. 87
C HistoryC History
Developed between 1969 and 1973 along with Developed between 1969 and 1973 along with UnixUnix
Due mostly to Dennis RitchieDue mostly to Dennis Ritchie Designed for systems programmingDesigned for systems programming
– Operating systemsOperating systems– Utility programsUtility programs– CompilersCompilers– FiltersFilters
Evolved from B, which evolved from BCPLEvolved from B, which evolved from BCPL
UNIX Intro. 88
C HistoryC History
Original machine (DEC PDP-Original machine (DEC PDP-11) was very small11) was very small– 24K bytes of memory, 12K used 24K bytes of memory, 12K used
for operating systemfor operating system
Written when computers were Written when computers were big, capital equipmentbig, capital equipment– Group would get one, develop Group would get one, develop
new language, OSnew language, OS
UNIX Intro. 89
C HistoryC History
Many language features designed to reduce Many language features designed to reduce memorymemory– Forward declarations required for everythingForward declarations required for everything– Designed to work in one pass: must know everythingDesigned to work in one pass: must know everything– No function nestingNo function nesting
PDP-11 was byte-addressedPDP-11 was byte-addressed– Now standardNow standard– Meant BCPL’s word-based model was insufficientMeant BCPL’s word-based model was insufficient
UNIX Intro. 90
Hello World in CHello World in C
#include <stdio.h>#include <stdio.h>
void main()void main(){{ printf(“Hello, world!\n”);printf(“Hello, world!\n”);}}
Preprocessor used to share information among source files
- Clumsy
+ Cheaply implemented
+ Very flexible
UNIX Intro. 91
Hello World in CHello World in C
#include <stdio.h>#include <stdio.h>
void main()void main(){{ printf(“Hello, world!\n”);printf(“Hello, world!\n”);}}
Program mostly a collection of functions
“main” function special: the entry point
“void” qualifier indicates function does not return anything
I/O performed by a library function: not included in the language
UNIX Intro. 92
Euclid’s algorithm in CEuclid’s algorithm in C
int gcd(int m, int n)int gcd(int m, int n){{ int r;int r; while ( (r = m % n) != 0) {while ( (r = m % n) != 0) { m = n;m = n; n = r;n = r; }} return n;return n;}}
“New Style” function declaration lists number and type of arguments
Originally only listed return type. Generated code did not care how many arguments were actually passed.
Arguments are call-by-value
UNIX Intro. 93
Euclid’s algorithm in CEuclid’s algorithm in C
int gcd(int m, int n)int gcd(int m, int n){{ int r;int r; while ( (r = m % n) != 0) {while ( (r = m % n) != 0) { m = n;m = n; n = r;n = r; }} return n;return n;}}
Automatic variable
Storage allocated on stack when function entered, released when it returns.
All parameters, automatic variables accessed w.r.t. frame pointer.
Extra storage needed while evaluating large expressions also placed on the stack
nm
ret. addr.r
Frame pointer Stack
pointer
Excess arguments simply ignored
UNIX Intro. 94
Euclid’s algorithm in CEuclid’s algorithm in C
int gcd(int m, int n)int gcd(int m, int n){{ int r;int r; while ( (r = m % n) != 0) {while ( (r = m % n) != 0) { m = n;m = n; n = r;n = r; }} return n;return n;}}
Expression: C’s basic type of statement.
Arithmetic and logical
Assignment (=) returns a value, so can be used in expressions
% is remainder
!= is not equal
UNIX Intro. 95
Euclid’s algorithm in CEuclid’s algorithm in C
int gcd(int m, int n)int gcd(int m, int n){{ int r;int r; while ( (r = m % n) != 0) {while ( (r = m % n) != 0) { m = n;m = n; n = r;n = r; }} return n;return n;}}
High-level control-flow statement. Ultimately becomes a conditional branch.
Supports “structured programming”
Each function returns a single value, usually an integer. Returned through a specific register by convention.
UNIX Intro. 96
Euclid Compiled on PDP-11Euclid Compiled on PDP-11
.globl _gcd.globl _gcd r0-r7r0-r7
.text.text PC is r7, SP is r6, FP is r5PC is r7, SP is r6, FP is r5_gcd:_gcd: jsr r5,rsavejsr r5,rsave save sp in frame pointer r5save sp in frame pointer r5L2:mov 4(r5),r1L2:mov 4(r5),r1 r1 = nr1 = n sxt r0sxt r0 sign extendsign extend div 6(r5),r0div 6(r5),r0 m / n = r0,r1m / n = r0,r1 mov r1,-10(r5)mov r1,-10(r5) r = m % nr = m % n jeq L3jeq L3 mov 6(r5),4(r5)mov 6(r5),4(r5)m = nm = n mov -10(r5),6(r5)mov -10(r5),6(r5) n = rn = r jbr L2jbr L2L3:mov 6(r5),r0L3:mov 6(r5),r0 return n in r0return n in r0 jbr L1jbr L1L1:jmp rretrnL1:jmp rretrn restore sp ptr, returnrestore sp ptr, return
int gcd(int m, int n)int gcd(int m, int n){{ int r;int r; while ( (r = m % n) != 0) {while ( (r = m % n) != 0) { m = n;m = n; n = r;n = r; }} return n;return n;}}
UNIX Intro. 97
Euclid Compiled on PDP-11Euclid Compiled on PDP-11
.globl _gcd.globl _gcd
.text.text_gcd:_gcd: jsr r5,rsavejsr r5,rsaveL2:mov 4(r5),r1L2:mov 4(r5),r1 sxt r0sxt r0 div 6(r5),r0div 6(r5),r0 mov r1,-10(r5)mov r1,-10(r5) jeq L3jeq L3 mov 6(r5),4(r5)mov 6(r5),4(r5) mov -10(r5),6(r5)mov -10(r5),6(r5) jbr L2jbr L2L3:mov 6(r5),r0L3:mov 6(r5),r0 jbr L1jbr L1L1:jmp rretrnL1:jmp rretrn
Very natural mapping from C into PDP-11 instructions.
Complex addressing modes make frame-pointer-relative accesses easy.
Another idiosyncrasy: registers were memory-mapped, so taking address of a variable in a register is straightforward.
UNIX Intro. 98
Pieces of CPieces of C
Types and VariablesTypes and Variables– Definitions of data in memoryDefinitions of data in memory
ExpressionsExpressions– Arithmetic, logical, and assignment operators in an Arithmetic, logical, and assignment operators in an
infix notationinfix notation StatementsStatements
– Sequences of conditional, iteration, and branching Sequences of conditional, iteration, and branching instructionsinstructions
FunctionsFunctions– Groups of statements and variables invoked recursivelyGroups of statements and variables invoked recursively
UNIX Intro. 99
C TypesC Types
Basic types: char, int, float, and doubleBasic types: char, int, float, and double Meant to match the processor’s native typesMeant to match the processor’s native types
– Natural translation into assemblyNatural translation into assembly– Fundamentally nonportableFundamentally nonportable
Declaration syntax: string of specifiers followed by Declaration syntax: string of specifiers followed by a declaratora declarator
Declarator’s notation matches that in an expressionDeclarator’s notation matches that in an expression Access a symbol using its declarator and get the Access a symbol using its declarator and get the
basic type backbasic type back
UNIX Intro. 100
C Type ExamplesC Type Examples
int i;int i;int *j, k;int *j, k;unsigned char *ch;unsigned char *ch;float f[10];float f[10];char nextChar(int, char nextChar(int, char*);char*);
int a[3][5][10];int a[3][5][10];int *func1(float);int *func1(float);int (*func2)(void);int (*func2)(void);
Integer
j: pointer to integer, int k
ch: pointer to unsigned char
Array of 10 floats
2-arg function
Array of three arrays of five …
function returning int *
pointer to function returning int
UNIX Intro. 101
C TypedefC Typedef
Type declarations recursive, complicated.Type declarations recursive, complicated. Name new types with typedef Name new types with typedef
Instead ofInstead of
int (*func2)(void)int (*func2)(void)
useuse
typedef int func2t(void);typedef int func2t(void);
func2t *func2;func2t *func2;
UNIX Intro. 102
C StructuresC Structures
A struct is an object with named fields:A struct is an object with named fields:
struct {struct { char *name;char *name; int x, y;int x, y; int h, w;int h, w;} box;} box;
Accessed using “dot” notation:Accessed using “dot” notation:
box.x = 5;box.x = 5;box.y = 2;box.y = 2;
UNIX Intro. 103
Struct bit-fieldsStruct bit-fields
Way to aggressively pack data in memoryWay to aggressively pack data in memory
struct {struct { unsigned int baud : 5;unsigned int baud : 5; unsigned int div2 : 1;unsigned int div2 : 1; unsigned int use_external_clock : 1;unsigned int use_external_clock : 1;} flags;} flags; Compiler will pack these fields into wordsCompiler will pack these fields into words Very implementation dependent: no guarantees of ordering, Very implementation dependent: no guarantees of ordering,
packing, etc.packing, etc. Usually less efficientUsually less efficient
– Reading a field requires masking and shiftingReading a field requires masking and shifting
UNIX Intro. 104
C UnionsC Unions
Can store objects of different types at different timesCan store objects of different types at different times
union {union { int ival;int ival; float fval;float fval; char *sval;char *sval;};};
Useful for arrays of dissimilar objectsUseful for arrays of dissimilar objects Potentially very dangerousPotentially very dangerous Good example of C’s philosophyGood example of C’s philosophy
– Provide powerful mechanisms that can be abusedProvide powerful mechanisms that can be abused
UNIX Intro. 105
Alignment of data in structsAlignment of data in structs
Most processors require n-byte objects to be Most processors require n-byte objects to be in memory at address n*kin memory at address n*k
Side effect of wide memory bussesSide effect of wide memory busses E.g., a 32-bit memory busE.g., a 32-bit memory bus Read from address 3 requires two accesses, Read from address 3 requires two accesses,
shiftingshifting4 3 2
1
4 3 2 1
UNIX Intro. 106
Alignment of data in structsAlignment of data in structs
Compilers add “padding” to structs to ensure proper alignment, Compilers add “padding” to structs to ensure proper alignment, especially for arraysespecially for arrays
Pad to ensure alignment of largest object (with biggest Pad to ensure alignment of largest object (with biggest requirement)requirement)
struct {struct { char a;char a; int b;int b; char c;char c;}}
Moral: rearrange to save memoryMoral: rearrange to save memory
abbbbc
abbbbc
Pad
UNIX Intro. 107
C Storage ClassesC Storage Classes
#include <stdlib.h>#include <stdlib.h>
int global_static;int global_static;static int file_static;static int file_static;
void foo(int auto_param)void foo(int auto_param){{ static int func_static;static int func_static; int auto_i, auto_a[10];int auto_i, auto_a[10]; double *auto_d = double *auto_d = malloc(sizeof(double)*5);malloc(sizeof(double)*5);
}}
Linker-visible. Allocated at fixed location
Visible within file. Allocated at fixed location.
Visible within func. Allocated at fixed location.
UNIX Intro. 108
C Storage ClassesC Storage Classes
#include <stdlib.h>#include <stdlib.h>
int global_static;int global_static;static int file_static;static int file_static;
void foo(int auto_param)void foo(int auto_param){{ static int func_static;static int func_static; int auto_i, auto_a[10];int auto_i, auto_a[10]; double *auto_d = double *auto_d = malloc(sizeof(double)*5);malloc(sizeof(double)*5);
}}
Space allocated on stack by function.
Space allocated on stack by caller.
Space allocated on heap by library routine.
UNIX Intro. 109
malloc() and free()malloc() and free()
Library routines for managing the heapLibrary routines for managing the heap
int *a;int *a;a = (int *) malloc(sizeof(int) * k); a = (int *) malloc(sizeof(int) * k); a[5] = 3;a[5] = 3;free(a);free(a);
Allocate and free arbitrary-sized chunks of Allocate and free arbitrary-sized chunks of memory in any ordermemory in any order
UNIX Intro. 110
malloc() and free()malloc() and free()
More flexible than automatic variables (stacked)More flexible than automatic variables (stacked) More costly in time and spaceMore costly in time and space
– malloc() and free() use complicated non-constant-time malloc() and free() use complicated non-constant-time algorithmsalgorithms
– Each block generally consumes two additional words of memoryEach block generally consumes two additional words of memory Pointer to next empty blockPointer to next empty block Size of this blockSize of this block
Common source of errorsCommon source of errors– Using uninitialized memoryUsing uninitialized memory– Using freed memoryUsing freed memory– Not allocating enoughNot allocating enough– Neglecting to free disused blocks (memory leaks)Neglecting to free disused blocks (memory leaks)
UNIX Intro. 111
malloc() and free()malloc() and free()
Memory usage errors so pervasive, entire Memory usage errors so pervasive, entire successful company (Pure Software) founded to successful company (Pure Software) founded to sell tool to track them downsell tool to track them down
Purify tool inserts code that verifies each memory Purify tool inserts code that verifies each memory accessaccess
Reports accesses of uninitialized memory, Reports accesses of uninitialized memory, unallocated memory, etc.unallocated memory, etc.
Publicly-available Electric Fence tool does Publicly-available Electric Fence tool does something similarsomething similar
UNIX Intro. 112
Dynamic Storage AllocationDynamic Storage Allocation
What are malloc() and free() actually What are malloc() and free() actually doing?doing?
Pool of memory segments:Pool of memory segments:Free
malloc( )
UNIX Intro. 113
Dynamic Storage AllocationDynamic Storage Allocation
Rules:Rules:– Each segment contiguous in memory (no holes)Each segment contiguous in memory (no holes)– Segments do not move once allocatedSegments do not move once allocated
malloc()malloc()– Find memory area large enough for segmentFind memory area large enough for segment– Mark that memory is allocatedMark that memory is allocated
free()free()– Mark the segment as unallocatedMark the segment as unallocated
UNIX Intro. 114
Dynamic Storage AllocationDynamic Storage Allocation
Three issues:Three issues:
How to maintain information about free memoryHow to maintain information about free memory
The algorithm for locating a suitable blockThe algorithm for locating a suitable block
The algorithm for freeing an allocated blockThe algorithm for freeing an allocated block
UNIX Intro. 115
Simple Dynamic Storage Simple Dynamic Storage AllocationAllocation Three issues:Three issues:
How to maintain information about free memoryHow to maintain information about free memory– Linked listLinked list
The algorithm for locating a suitable blockThe algorithm for locating a suitable block– First-fitFirst-fit
The algorithm for freeing an allocated blockThe algorithm for freeing an allocated block– Coalesce adjacent free blocksCoalesce adjacent free blocks
UNIX Intro. 116
Simple Dynamic Storage Simple Dynamic Storage AllocationAllocation
Next
Size
Next
SizeSizeFree block Allocated block
malloc( )
First large-enough free block selected
Free block divided into two
Previous next pointer updated
Newly-allocated region begins with a size value
UNIX Intro. 117
Simple Dynamic Storage Simple Dynamic Storage AllocationAllocation
free(a)
Appropriate position in free list identified
Newly-freed region added to adjacent free regions
UNIX Intro. 118
Dynamic Storage AllocationDynamic Storage Allocation
Many, many variantsMany, many variants Other “fit” algorithmsOther “fit” algorithms Segregation of objects by sizesSegregation of objects by sizes
– 8-byte objects in one region, 16 in another, etc.8-byte objects in one region, 16 in another, etc. More intelligent list structuresMore intelligent list structures
UNIX Intro. 119
Memory PoolsMemory Pools
An alternative: Memory poolsAn alternative: Memory pools Separate management policy for each poolSeparate management policy for each pool
Stack-based pool: can only free whole pool at onceStack-based pool: can only free whole pool at once– Very cheap operationVery cheap operation– Good for build-once data structures (e.g., compilers)Good for build-once data structures (e.g., compilers)
Pool for objects of a single sizePool for objects of a single size– Useful in object-oriented programsUseful in object-oriented programs
Not part of the C standard libraryNot part of the C standard library
UNIX Intro. 120
ArraysArrays Array: sequence of identical Array: sequence of identical objects in memoryobjects in memory
int a[10];int a[10]; means space for means space for ten integersten integers
Filippo Brunelleschi, Ospdale degli Innocenti, Firenze, Italy, 1421
By itself, a is the address of the first integer
*a and a[0] mean the same thing
The address of a is not stored in memory: the compiler inserts code to compute it when it appears
Ritchie calls this interpretation the biggest conceptual jump from BCPL to C
UNIX Intro. 121
Multidimensional ArraysMultidimensional Arrays
Array declarations read right-to-leftArray declarations read right-to-left int a[10][3][2];int a[10][3][2]; ““an array of ten arrays of three arrays of an array of ten arrays of three arrays of
two ints”two ints” In memoryIn memory2 2 2
3
2 2 2
3
2 2 2
3
...
10
Seagram Building, Ludwig Mies van der Rohe,1957
UNIX Intro. 122
Multidimensional ArraysMultidimensional Arrays
Passing a multidimensional array as an argument Passing a multidimensional array as an argument requires all but the first dimensionrequires all but the first dimension
int a[10][3][2];int a[10][3][2];void examine( a[][3][2] ) { … }void examine( a[][3][2] ) { … }
Address for an access such as Address for an access such as a[i][j][k]a[i][j][k] is is
a + k + 2*(j + 3*i)a + k + 2*(j + 3*i)
UNIX Intro. 123
Multidimensional ArraysMultidimensional Arrays
Use arrays of pointers for variable-sized Use arrays of pointers for variable-sized multidimensional arraysmultidimensional arrays
You need to allocate space for and initialize You need to allocate space for and initialize the arrays of pointersthe arrays of pointers
int ***a;int ***a; a[3][5][4]a[3][5][4] expands to expands to *(*(*(a+3)+5)+4)*(*(*(a+3)+5)+4)
The value
int ** int * int
int ***a
UNIX Intro. 124
C ExpressionsC Expressions
Traditional mathematical expressionsTraditional mathematical expressions
y = a*x*x + b*x + c;y = a*x*x + b*x + c;
Very rich set of expressionsVery rich set of expressions Able to deal with arithmetic and bit Able to deal with arithmetic and bit
manipulationmanipulation
UNIX Intro. 125
C Expression ClassesC Expression Classes
arithmetic: arithmetic: + – * / % + – * / % comparison: comparison: == != < <= > >=== != < <= > >= bitwise logical: bitwise logical: & | ^ ~& | ^ ~ shifting: shifting: << >><< >> lazy logical: lazy logical: && || !&& || ! conditional: conditional: ? :? : assignment: assignment: = += -== += -= increment/decrement: increment/decrement: ++ --++ -- sequencing: sequencing: ,, pointer: pointer: * -> & []* -> & []
UNIX Intro. 126
Bitwise operatorsBitwise operators
and: & or: | xor: ^ not: ~ left shift: << right shift: >>and: & or: | xor: ^ not: ~ left shift: << right shift: >> Useful for bit-field manipulationsUseful for bit-field manipulations
#define MASK 0x040#define MASK 0x040if (a & MASK) { … }if (a & MASK) { … } /* Check bits /* Check bits
*/*/c |= MASK;c |= MASK; /* Set bits *//* Set bits */c &= ~MASK;c &= ~MASK; /* Clear bits *//* Clear bits */d = (a & MASK) >> 4;d = (a & MASK) >> 4; /* Select field *//* Select field */
UNIX Intro. 127
Lazy Logical OperatorsLazy Logical Operators
““Short circuit” tests save timeShort circuit” tests save time
if ( a == 3 && b == 4 && c == 5 ) { … }if ( a == 3 && b == 4 && c == 5 ) { … }equivalent toequivalent toif (a == 3) { if (b ==4) { if (c == 5) { … } } }if (a == 3) { if (b ==4) { if (c == 5) { … } } }
Evaluation order (left before right) provides safetyEvaluation order (left before right) provides safety
if ( i <= SIZE && a[i] == 0 ) { … }if ( i <= SIZE && a[i] == 0 ) { … }
UNIX Intro. 128
Conditional OperatorConditional Operator
c = a < b ? a + 1 : b – 1;c = a < b ? a + 1 : b – 1;
Evaluate first expression. If true, evaluate second, otherwise Evaluate first expression. If true, evaluate second, otherwise evaluate third.evaluate third.
Puts almost statement-like behavior in expressions.Puts almost statement-like behavior in expressions.
BCPL allowed code in an expression:BCPL allowed code in an expression:
a := 5 + valof{ int i, s = 0; for (i = 0 ; i < 10 ; i++) s += a[I];a := 5 + valof{ int i, s = 0; for (i = 0 ; i < 10 ; i++) s += a[I]; return s; }return s; }
UNIX Intro. 129
Side-effects in expressionsSide-effects in expressions
Evaluating an expression often has side-Evaluating an expression often has side-effectseffects
a++a++ increment a afterwardsincrement a afterwards
a = 5a = 5 changes the value of achanges the value of a
a = foo() a = foo() function foo may have function foo may have side-effectsside-effects
UNIX Intro. 130
Pointer ArithmeticPointer Arithmetic
From BCPL’s view of the worldFrom BCPL’s view of the world Pointer arithmetic is natural: everything’s an integerPointer arithmetic is natural: everything’s an integerint *p, *q;int *p, *q;*(p+5)*(p+5) equivalent to equivalent to p[5]p[5] If p and q point into same array, If p and q point into same array, p – qp – q is number is number
of elements between p and q.of elements between p and q. Accessing fields of a pointed-to structure has a Accessing fields of a pointed-to structure has a
shorthand:shorthand:p->fieldp->field means means (*p).field(*p).field
UNIX Intro. 131
C StatementsC Statements
ExpressionExpression ConditionalConditional
– if (expr) { … } else {…}if (expr) { … } else {…}– switch (expr) { case c1: case c2: … }switch (expr) { case c1: case c2: … }
IterationIteration– while (expr) { … }while (expr) { … } zero or more iterationszero or more iterations– do … while (expr)do … while (expr) at least one iterationat least one iteration– for ( init ; valid ; next ) { … }for ( init ; valid ; next ) { … }
JumpJump– goto labelgoto label– continue;continue; go to start of loopgo to start of loop– break;break; exit loop or switchexit loop or switch– return expr;return expr; return from functionreturn from function
UNIX Intro. 132
The Switch StatementThe Switch Statement
Performs multi-way branchesPerforms multi-way branches
switch (expr) {switch (expr) {case 1: …case 1: … break;break;case 5:case 5:case 6: …case 6: … break;break;default: …default: … break;break;}}
tmp = expr;if (tmp == 1) goto L1else if (tmp == 5) goto L5else if (tmp == 6) goto L6else goto Default;L1: … goto Break;L5:;L6: … goto Break;Default: … goto Break;Break:
UNIX Intro. 133
Switch Generates Interesting Switch Generates Interesting CodeCode Sparse case labels tested sequentiallySparse case labels tested sequentially
if (e == 1) goto L1;if (e == 1) goto L1;else if (e == 10) goto L2;else if (e == 10) goto L2;else if (e == 100) goto L3;else if (e == 100) goto L3;
Dense cases use a jump tableDense cases use a jump table
table = { L1, L2, Default, L4, L5 };table = { L1, L2, Default, L4, L5 };if (e >= 1 and e <= 5) goto table[e];if (e >= 1 and e <= 5) goto table[e];
Clever compilers may combine theseClever compilers may combine these
UNIX Intro. 134
setjmp/longjmpsetjmp/longjmp
A way to exit from deeply nested functionsA way to exit from deeply nested functions A hack now a formal part of the standard libraryA hack now a formal part of the standard library
#include <setjmp.h>#include <setjmp.h>jmp_buf jmpbuf;jmp_buf jmpbuf;
void top(void) {void top(void) { switch (setjmp(jmpbuf)) {switch (setjmp(jmpbuf)) { case 0: child(); break;case 0: child(); break; case 1: /* longjmp called */ break;case 1: /* longjmp called */ break;} }} }
void deeplynested() { longjmp(jmpbuf, 1); }void deeplynested() { longjmp(jmpbuf, 1); }
Space for a return address and registers (including stack pointer, frame pointer)
Stores context, returns 0
Returns to context, making it appear setjmp() returned 1
UNIX Intro. 135
The Macro PreprocessorThe Macro Preprocessor
Relatively late and awkward addition to the languageRelatively late and awkward addition to the language
Symbolic constantsSymbolic constants#define PI 3.1415926535#define PI 3.1415926535
Macros with arguments for emulating inliningMacros with arguments for emulating inlining#define min(x,y) ((x) < (y) ? (x) : (y))#define min(x,y) ((x) < (y) ? (x) : (y))
Conditional compilationConditional compilation#ifdef __STDC__#ifdef __STDC__
File inclusion for sharing of declarationsFile inclusion for sharing of declarations#include “myheaders.h”#include “myheaders.h”
UNIX Intro. 136
Macro Preprocessor PitfallsMacro Preprocessor Pitfalls
Header file dependencies usually form a directed Header file dependencies usually form a directed acyclic graph (DAG)acyclic graph (DAG)
How do you avoid defining things twice?How do you avoid defining things twice?
Convention: surround each header (.h) file with a Convention: surround each header (.h) file with a conditional:conditional:
#ifndef __MYHEADER_H__#ifndef __MYHEADER_H__#define __MYHEADER_H__#define __MYHEADER_H__/* Declarations *//* Declarations */#endif#endif
UNIX Intro. 137
Macro Preprocessor PitfallsMacro Preprocessor Pitfalls
Macros with arguments do not have function call Macros with arguments do not have function call semanticssemantics
Function Call:Function Call:– Each argument evaluated once, in undefined order, Each argument evaluated once, in undefined order,
before function is calledbefore function is called
Macro:Macro:– Each argument evaluated once every time it appears in Each argument evaluated once every time it appears in
expansion textexpansion text
UNIX Intro. 138
Macro Preprocessor pitfallsMacro Preprocessor pitfalls
Example: the “min” functionExample: the “min” functionint min(int a, int b)int min(int a, int b) { if (a < b) return a; else return b; }{ if (a < b) return a; else return b; }#define min(a,b) ((a) < (b) ? (a) : (b))#define min(a,b) ((a) < (b) ? (a) : (b))
Identical for min(5,x)Identical for min(5,x) Different when evaluating expression has side-effect:Different when evaluating expression has side-effect:
min(a++,b)min(a++,b)– min function increments a oncemin function increments a once– min macro may increment a twice if a < bmin macro may increment a twice if a < b
UNIX Intro. 139
Macro Preprocessor PitfallsMacro Preprocessor Pitfalls
Text substitution can expose unexpected groupingsText substitution can expose unexpected groupings
#define mult(a,b) a*b#define mult(a,b) a*bmult(5+3,2+4)mult(5+3,2+4) Expands to Expands to 5 + 3 * 2 + 45 + 3 * 2 + 4 Operator precedence evaluates this asOperator precedence evaluates this as5 + (3*2) + 4 = 15 not (5+3) * (2+4) = 48 as intended5 + (3*2) + 4 = 15 not (5+3) * (2+4) = 48 as intended Moral: By convention, enclose each macro argument in Moral: By convention, enclose each macro argument in
parenthesis:parenthesis:#define mult(a,b) (a)*(b)#define mult(a,b) (a)*(b)
UNIX Intro. 140
Nondeterminism in CNondeterminism in C
Library routinesLibrary routines– malloc() returns a nondeterministically-chosen addressmalloc() returns a nondeterministically-chosen address– Address used as a hash key produces nondeterministic Address used as a hash key produces nondeterministic
resultsresults Argument evaluation orderArgument evaluation order
– myfunc( func1(), func2(), func3() )myfunc( func1(), func2(), func3() )– func1, func2, and func3 may be called in any orderfunc1, func2, and func3 may be called in any order
Word sizesWord sizesint a;int a;a = 1 << 16;a = 1 << 16; /* Might be zero *//* Might be zero */a = 1 << 32;a = 1 << 32; /* Might be zero *//* Might be zero */
UNIX Intro. 141
Nondeterminism in CNondeterminism in C
Uninitialized variablesUninitialized variables– Automatic variables may take values from stackAutomatic variables may take values from stack– Global variables left to the whims of the OSGlobal variables left to the whims of the OS
Reading the wrong value from a unionReading the wrong value from a union– union { int a; float b; } u; u.a = 10; printf(“%g”, u.b);union { int a; float b; } u; u.a = 10; printf(“%g”, u.b);
Pointer dereferencePointer dereference– *a undefined unless it points within an allocated array and has *a undefined unless it points within an allocated array and has
been initializedbeen initialized– Very easy to violate these rulesVery easy to violate these rules– Legal: int a[10]; a[-1] = 3; a[10] = 2; a[11] = 5;Legal: int a[10]; a[-1] = 3; a[10] = 2; a[11] = 5;– int *a, *b; a - b only defined if a and b point into the same arrayint *a, *b; a - b only defined if a and b point into the same array
UNIX Intro. 142
Nondeterminism in CNondeterminism in C
How to deal with nondeterminism?How to deal with nondeterminism?– Caveat programmerCaveat programmer
Studiously avoid nondeterministic constructsStudiously avoid nondeterministic constructs– Compilers, lint, etc. don’t really helpCompilers, lint, etc. don’t really help
Philosophy of C: get out of the programmer’s wayPhilosophy of C: get out of the programmer’s way ““C treats you like a consenting adult”C treats you like a consenting adult”
– Created by a systems programmer (Ritchie)Created by a systems programmer (Ritchie) ““Pascal treats you like a misbehaving child”Pascal treats you like a misbehaving child”
– Created by an educator (Wirth)Created by an educator (Wirth) ““Ada treats you like a criminal”Ada treats you like a criminal”
– Created by the Department of DefenseCreated by the Department of Defense
UNIX Intro. 143
SummarySummary
C evolved from the typeless languages BCPL and C evolved from the typeless languages BCPL and BB
Array-of-bytes model of memory permeates the Array-of-bytes model of memory permeates the languagelanguage
Original weak type system strengthened over timeOriginal weak type system strengthened over time C programs built fromC programs built from
– Variable and type declarationsVariable and type declarations– FunctionsFunctions– StatementsStatements– ExpressionsExpressions
UNIX Intro. 144
Summary of C typesSummary of C types
Built from primitive types that match processor typesBuilt from primitive types that match processor types char, int, float, double, pointerschar, int, float, double, pointers Struct and union aggregate heterogeneous objectsStruct and union aggregate heterogeneous objects Arrays build sequences of identical objectsArrays build sequences of identical objects Alignment restrictions ensured by compilerAlignment restrictions ensured by compiler Multidimensional arraysMultidimensional arrays Three storage classesThree storage classes
– global, static (address fixed at compile time)global, static (address fixed at compile time)– automatic (on stack)automatic (on stack)– heap (provided by malloc() and free() library calls)heap (provided by malloc() and free() library calls)
UNIX Intro. 145
Summary of C expressionsSummary of C expressions
Wide variety of operatorsWide variety of operators– Arithmetic + - * /Arithmetic + - * /– Logical && || (lazy)Logical && || (lazy)– Bitwise & |Bitwise & |– Comparison < <=Comparison < <=– Assignment = += *=Assignment = += *=– Increment/decrement ++ --Increment/decrement ++ --– Conditional ? :Conditional ? :
Expressions may have side-effectsExpressions may have side-effects
UNIX Intro. 146
Summary of C statementsSummary of C statements
ExpressionExpression ConditionalConditional
– if-else switchif-else switch IterationIteration
– while do-while for(;;)while do-while for(;;) BranchingBranching
– goto break continue returngoto break continue return
Awkward setjmp, longjmp library routines for non-Awkward setjmp, longjmp library routines for non-local gotolocal goto
UNIX Intro. 147
Summary of CSummary of C
PreprocessorPreprocessor– symbolic constantssymbolic constants
– inline-like functionsinline-like functions
– conditional compilationconditional compilation
– file inclusionfile inclusion
Sources of nondeterminsmSources of nondeterminsm– library functions, evaluation order, variable sizeslibrary functions, evaluation order, variable sizes
UNIX Intro. 148
The Main PointsThe Main Points
Like a high-level assembly languageLike a high-level assembly language
Array-of-cells model of memoryArray-of-cells model of memory
Very efficient code generation follows from close Very efficient code generation follows from close semantic matchsemantic match
Language lets you do just about everythingLanguage lets you do just about everything Very easy to make mistakesVery easy to make mistakes
UNIX Intro. 149
Object Oriented ProgrammingObject Oriented Programming
UNIX Intro. 150
Problem DescriptionProblem Description
“ …“ …customerscustomers are allowed to have different are allowed to have different types of types of bank accountsbank accounts, , depositdeposit moneymoney, , withdrawwithdraw moneymoney and and transfertransfer moneymoney between between accountsaccounts””
UNIX Intro. 151
Procedural ApproachProcedural Approach
bool MakeDeposit(int accountNum,float amount);bool MakeDeposit(int accountNum,float amount);
float Withdraw(int accountNum,float amount);float Withdraw(int accountNum,float amount);
struct Account {struct Account {
char *name;char *name;
int accountNum;int accountNum;
float balance;float balance;
char accountType;char accountType;
};};
UNIX Intro. 152
Procedural Approach cont’dProcedural Approach cont’d
Focus is on proceduresFocus is on procedures All data is shared: no protectionAll data is shared: no protection More difficult to modifyMore difficult to modify Hard to manage complexityHard to manage complexity
UNIX Intro. 153
Procedural vs. Object-OrientedProcedural vs. Object-Oriented
ProceduralProcedural
Withdraw, deposit, transferWithdraw, deposit, transfer
Object OrientedObject Oriented
Customer, money, accountCustomer, money, account
UNIX Intro. 154
Mapping the world to softwareMapping the world to software
Objects in the problem domain are mapped to Objects in the problem domain are mapped to objects in softwareobjects in software
011101
10011
11101
0110100
11010
010101
1110101
10101
UNIX Intro. 155
Object OrientedObject Oriented
Data and operations are grouped togetherData and operations are grouped together
AccountWithdraw
Deposit
Transfer
Interface:
Set of available operations
UNIX Intro. 156
Data EncapsulationData Encapsulation
class Account {
public:
float withdraw();
void deposit(float amount);
private:
float balance;
);
UNIX Intro. 157
Advantages of EncapsulationAdvantages of Encapsulation
ProtectionProtection ConsistencyConsistency Allows changeAllows change
UNIX Intro. 158
Objects and ClassesObjects and Classes
Classes reflect concepts, objects reflect Classes reflect concepts, objects reflect instances that embody those concepts.instances that embody those concepts.
Daria Jane BrittanyJodie
girlclassobject
UNIX Intro. 159
Objects and Classes cont’dObjects and Classes cont’d
A A classclass captures the common properties of captures the common properties of the objects instantiated from itthe objects instantiated from it
A class characterizes the common A class characterizes the common behavior of all the objects that are its behavior of all the objects that are its instancesinstances
UNIX Intro. 160
Objects and Classes cont’dObjects and Classes cont’dClass BankAccountBalanceInterestYTDOwnerAccount_number
Balance 500InterestYTDOwner Account_number
Balance 10,000InterestYTDOwner Account_number
Operations
MakeDesposit
Transfer
WithDraw
GetBalance
UNIX Intro. 161
Objects as instances of ClassesObjects as instances of Classes
The world conceptually consists of objectsThe world conceptually consists of objects Many objects can be said to be of the same type Many objects can be said to be of the same type
or classor class– My bank account, your bank account, Bill Gates’ bank My bank account, your bank account, Bill Gates’ bank
account …account …
We call the object type a class We call the object type a class
UNIX Intro. 162
InstantiationInstantiation
An Object is instantiated from a ClassAn Object is instantiated from a Class
BankAccount myAccount;
myAccount = new BankAccount;
UNIX Intro. 163
Objects and ClassesObjects and Classes
ClassClass– Visible in source codeVisible in source code
– The code is not The code is not duplicatedduplicated
ObjectObject– Own copy of dataOwn copy of data
– Active in running Active in running programprogram
– Occupies memoryOccupies memory
– Has the set of Has the set of operations given in the operations given in the classclass
UNIX Intro. 164
ClassificationClassification
Mammal
Rodent Primate Cats
Reptile
Animal
Squirel RabbitMouse
UNIX Intro. 165
ClassificationClassification
Checking Account
Value First Select Access First Interest
Savings Account
Account
UNIX Intro. 166
InheritanceInheritance
A class which is a subtype of a more A class which is a subtype of a more general class is said to be inherited from it.general class is said to be inherited from it.
The sub-class inherits the base class’ data The sub-class inherits the base class’ data members and member functionsmembers and member functions
UNIX Intro. 167
Inheritance cont’dInheritance cont’d
A sub-class has all data members of its A sub-class has all data members of its base-class plus its ownbase-class plus its own
A sub-class has all member functions of its A sub-class has all member functions of its base class (with changes) plus its ownbase class (with changes) plus its own
Inheritance is meant to implement sub-Inheritance is meant to implement sub-typing (don’t abuse it)typing (don’t abuse it)
UNIX Intro. 168
AbstractionAbstraction
Management of complexityManagement of complexity Hierarchical classification:Hierarchical classification:
is-a relationship: inheritanceis-a relationship: inheritance
has-a relationship: containmenthas-a relationship: containment
UNIX Intro. 169
PolymorphismPolymorphism
One interfaceOne interface Multiple implementationsMultiple implementations InheritanceInheritance Method overloadingMethod overloading
UNIX Intro. 170
What is a good class ?What is a good class ?
A class abstracts objects A class abstracts objects A class should be non-trivial in the context A class should be non-trivial in the context
of the program (has data structures and of the program (has data structures and operations different from other classes)operations different from other classes)
UNIX Intro. 171
SummarySummary
What is Object Oriented Programming?What is Object Oriented Programming? Object-oriented programming is a method Object-oriented programming is a method
of implementation in which programs are of implementation in which programs are organized as cooperative collections of organized as cooperative collections of objects, each of which represents an objects, each of which represents an instance of some class, and whose classes instance of some class, and whose classes are all members of one or more hierarchy of are all members of one or more hierarchy of classes united via inheritance relationshipsclasses united via inheritance relationships