LP LECTURE NOTES-1 Linux Programming PDF
LP LECTURE NOTES-1 Linux Programming PDF
asia
LECTURE NOTES
ON
LINUX PROGRAMMING
IV B. Tech I semester
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
Syllabus
UNIT-I:
Linux Utilities-File handling utilities, Security by file permissions, Process utilities, Disk
utilities, Networking commands, Filters, Text processing utilities and Backup utilities.sed –
scripts, operation, addresses, commands, awk – execution, fields and records.scripts,
operation, patterns, actions, associative arrays, string & mathematical functions, system
commandsinawk,applications.
Shell programming with Bourne again shell(bash): Introduction, shell responsibilities, pipes
and Redirection, here documents, running a shell script, the shell as a programming language,
shell meta characters, file name substitution, shell variables, command substitution, shell
commands, the environment, quoting, test command, control structures, arithmetic in shell,
shell script examples, interrupt processing, functions, debugging shell scripts.
UNIT-II:
Files and Directories: File Concept, File types, File System Structure, File metadata- Inodes,
kernel support for files, System calls for file I/O operations- open, create, read, write, close,
lseek,dup2, file status information- stat family, file and record locking- fcntl function, file
permission- chmod, fchmod, file ownership- chown, lchown, fchown, links- soft links & hard
links- symlink, link, ulink
Directories: creating, removing and changing directories- mkdir, rmdir, chdir, obtaining
current working directory- getcwd, directory contents, scanning directories- opendir, readdir,
closedir,rewind dir functions.
UNIT-III:
Process – Process concept, Layout of a C program, image in main memory, process
environment- environment list, environment variables, getenv, setenv, Kernel support for
process, process identification, process control - process creation, replacing a process image,
waiting for a process, process termination, zombie process, orphan process, system call
interface for process management- fork, vfork, exit, wait, waitpid, exec family, process
groups, sessions & controlling terminal, differences between threads & processes.
Signals– Introduction to signals, Signal generation and handling, Kernel support for signals,
Signal function, unreliable signals, reliable signals, kill, raise , alarm, pause, abort, sleep
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
functions.
UNIT-IV:
Interprocess Communication : Introduction to IPC, IPC between processes on a single
computer system, IPC between processes on different systems, Pipes- creation, IPC between
related processes using unnamed pipes, FIFOs- creation, IPC between unrelated processes
using FIFOs(named pipes), differences between unnamed and named pipes, popen & pclose
library functions.Message Queues- Kernel support for messages, APIs for message queues,
client/server example. Semaphores-Kernel support for semaphores, APIs for semaphores, file
locking with Semaphores
UNIT -V:
Shared Memory- Kernel support for shared memory, APIs for shared memory, shared
memory example.Sockets: Introduction to Berkeley Sockets, IPC over a network, client/server
model, Socket Address structures (UNIX domain & internet domain), Socket system calls for
connection oriented protocol and connectionless protocol, example-client/server programs-
single client/server connection, Multiple simultaneous clients, Socket options- setsockopt &
fcntl system calls, comparision of IPC mechanisms.
TEXT BOOKS:
1. Unix System Programming using C++, T.Chan, PHI.
2. Unix Concepts and Applications, 4th Edition, Sumitabha Das, TMH.
3. Unix Network Programming, W.R.Stevens,PHI.
REFERENCE BOOKS:
1. Beginning Linux Programming, 4th Edition, N.Matthew, R.Stones,Wrox, Wiley India
Edition.
2. Unix for programmers and users, 3rd Edition, Graham Glass, King Ables, Pearson
Education. 3.System Programming with c and unix,A.Hoover,Pearson.
4. Unix System programming,Communication,Concurrency and
Threads,K.A.Robbins and S.Robbins,Pearson Education.
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
CONTENTS
UNIT : I
I.Introduction to
Linux 1.Linux
Utilities
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
UNIT-I
I. Introduction to Linux:
Linux is a Unix-like computer operating system assembled under the model of free and open
source software development and distribution. The defining component of Linux is the Linux
kernel, an operating system kernel first released 5 October 1991 by Linus Torvalds.
Linux was originally developed as a free operating system for Intel x86-based personal
computers. It has since been ported to more computer hardware platforms than any other
operating system. It is a leading operating system on servers and other big iron systems such as
mainframe computers and supercomputers more than 90% of today's 500 fastest
supercomputers run some variant of Linux, including the 10 fastest. Linux also runs on
embedded systems (devices where the operating system is typically built into the firmware and
highly tailored to the system) such as mobile phones, tablet computers, network routers,
televisions and video game consoles; the Android system in wide use on mobile devices is
built on the Linux kernel.
Basic Features
Following are some of the important features of Linux Operating System.
Portable - Portability means softwares can works on different types of hardwares in
same way. Linux kernel and application programs supports their installation on any kind
of hardware platform.
Open Source - Linux source code is freely available and it is community based
development project. Multiple teams works in collaboration to enhance the capability of
Linux operating system and it is continuously evolving.
Multi-User - Linux is a multiuser system means multiple users can access system
resources like memory/ ram/ application programs at same time.
Multiprogramming - Linux is a multiprogramming system means multiple applications
can run at same time.
Hierarchical File System - Linux provides a standard file structure in which system
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
Linux Advantages
1.Low cost: You don’t need to spend time and money to obtain licenses since Linux andmuch
of its software come with the GNU General Public License. You can start to workimmediately
without worrying that your software may stop working anytime because thefree trial version
expires. Additionally, there are large repositories from which you canfreely download high
quality software for almost any task you can think of.
2.Stability: Linux doesn’t need to be rebooted periodically to maintain performance levels.
Itdoesn’t freeze up or slow down over time due to memory leaks and such. Continuous up-
times of hundreds of days (up to a year or more) are not uncommon.
3.Performance: Linux provides persistent high performance on workstations and onnetworks.
It can handle unusually large numbers of users simultaneously, and can make oldcomputers
sufficiently responsive to be useful again.
4.Network friendliness: Linux was developed by a group of programmers over the Internet
and has therefore strong support for network functionality; client and server systems can be
easily set up on any computer running Linux. It can perform tasks such as network backups
faster and more reliably than alternative systems.
5.Flexibility: Linux can be used for high performance server applications, desktop
applications, and embedded systems. You can save disk space by only installing the
components needed for a particular use. You can restrict the use of specific computers by
installing for example only selected office applications instead of the whole suite.
6.Compatibility: It runs all common Unix software packages and can process all common file
formats.
7.Choice: The large number of Linux distributions gives you a choice. Each distribution is
developed and supported by a different organization. You can pick the one you like best; the
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
core functionalities are the same; most software runs on most distributions.
8.Fast and easy installation: Most Linux distributions come with user-friendly installation
and setup programs. Popular Linux distributions come with tools that make installation of
additional software very user friendly as well.
9.Full use of hard disk: Linux continues work well even when the hard disk is almost full.
10.Multitasking: Linux is designed to do many things at the same time; e.g., a large printing
job in the background won’t slow down your other work.
11.Security: Linux is one of the most secure operating systems. “Walls” and flexible file
access permission systems prevent access by unwanted visitors or viruses. Linux users have to
option to select and safely download software, free of charge, from online repositories
containing thousands of high quality packages. No purchase transactions requiring credit card
numbers or other sensitive personal information are necessary.
12.Open Source: If you develop software that requires knowledge or modification of the
operating system code, Linux’s source code is at your fingertips. Most Linux applications are
Open Source as well.
Difference between UNIX and LINUX
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
by various vendors.
Usage Linux can be installed on a wide The UNIX operating system is used
variety of computer hardware, in internet servers, workstations &
ranging from mobile phones, PCs. Backbone of the majority of
tablet computers and video finance infastructure and many
game consoles, to mainframes 24x365 high availability solutions.
and supercomputers.
File system Ext2, Ext3, Ext4, Jfs, ReiserFS, jfs, gpfs, hfs, hfs+, ufs, xfs, zfs
support Xfs, Btrfs, FAT, FAT32, NTFS format
Text mode BASH (Bourne Again SHell) is Originally the Bourne Shell. Now
interface the Linux default shell. It can it's compatible with many others
support multiple command including BASH, Korn & C.
interpreters.
10
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
Price Free but support is available for Some free for development use
a price. (Solaris) but support is available for
a price.
Security Linux has had about 60-100 A rough estimate of UNIX viruses
viruses listed till date. None of is between 85 -120 viruses reported
them actively spreading till date.
nowadays.
11
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
10.5)/x86(10.4)/x64(10.5-10.8)
12
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
13
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
1. / – Root
Every single file and directory starts from the root directory.
Only root user has write privilege under this directory.
Please note that /root is root user’s home directory, which is not same as /.
2. /bin – User Binaries
Contains binary executables.
Common linux commands you need to use in single-user modes are located under this
directory.
Commands used by all the users of the system are located here.
For example: ps, ls, ping, grep, cp.
3. /sbin – System Binaries
Just like /bin, /sbin also contains binary executables.
But, the linux commands located under this directory are used typically by system
aministrator, for system maintenance purpose.
For example: iptables, reboot, fdisk, ifconfig, swapon
4. /etc – Configuration Files
14
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
15
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
1.Linux Utilities:
utilities: Cat
16
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
Command:
cat linux command concatenates files and print it on the standard output.
SYNTAX:
The Syntax
is
cat [OPTIONS] [FILE]...
OPTIONS:
-A Show all.
-b Omits line numbers for blank space in the output.
-e A $ character will be printed at the end of each line prior to a new line.
-E Displays a $ (dollar sign) at the end of each line.
-n Line numbers for all the output lines.
-s If the output has multiple empty lines it replaces it with one empty line.
-T Displays the tab characters in the output.
Non-printing characters (with the exception of tabs, new-lines and form-feeds)
-v are printed visibly.
Example:
To Create a new file:
cat > file1.txt
This command creates a new file file1.txt. After typing into the file press control+d
(^d) simultaneously to end the file.
To append data into the same file use append operator >> to write into the file, else
the file will be overwritten (i.e., all of its contents will be erased).
2. To display a
17
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
file: cat
file1.txt
18
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
The above cat command will concatenate the two files (file1.txt and file2.txt) and it will
display the output in the screen. Some times the output may not fit the monitor screen. In
such situation you can print those files in a new file or display the file using less
command.
In the above example the output is redirected to new file file3.txt. The cat command will
create new file file3.txt and store the concatenated output into file3.txt.
rm COMMAND:
rm linux command is used to remove/delete the file from the directory.
SYNTAX:
The Syntax is
rm [options..] [file | directory]
OPTIONS:
19
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
rm file1.txt
rm -ir tmp
This rm command recursively removes the contents of all subdirectories of the tmp
directory, prompting you regarding the removal of each file, and then removes the tmp
directory itself.
rm file1.txt file2.txt
cd COMMAND:
cd command is used to change the directory.
SYNTAX:
The Syntax is
cd [directory | ~ | ./ | ../ | - ]
OPTIONS:
20
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
2. cd ..
This will change to the parent-directory from the current working directory/sub-directory.
3. cd ~
This command will move to the user's home directory which is "/home/username".
cp COMMAND:
cp command copy files from one location to another. If the destination is an existing file, then
the file is overwritten; if the destination is an existing directory, the file is copied into the
directory (the directory is not overwritten).
SYNTAX:
The Syntax is
cp [OPTIONS]... SOURCE DEST
cp [OPTIONS]... SOURCE... DIRECTORY
cp [OPTIONS]... --target-directory=DIRECTORY SOURCE...
OPTIONS:
-a same as -dpR.
--backup[=CONTROL] make a backup of each existing destination file
-b like --backup but does not accept an argument.
if an existing destination file cannot be opened, remove it and try
-f
again.
-p same as --preserve=mode,ownership,timestamps.
21
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
file: cp -b file1.php
file2.php
subfolders: cp -R scripts
scripts1
The above cp command copy the folder and subfolders from scripts to scripts1.
ls COMMAND:
ls command lists the files and directories under current working directory.
SYNTAX:
The
Syntax is
ls [OPTIONS]... [FILE]
22
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
OPTIONS:
Lists all the files, directories and their mode, Number of links, owner of the
-l
file, file size, Modified date and time and filename.
-t Lists in order of last modification time.
-a Lists all entries including hidden files.
-d Lists directory files instead of contents.
-p Puts slash at the end of each directories.
-u List in order of last access time.
-i Display inode information.
-ltr List files order by date.
-lSr List files order by file size.
EXAMPLE:
Display root directory contents:
ls /
ls -a
ls -i
7373073 book.gif
7373074 clock.gif
7373082 globe.gif
7373078 pencil.gif
7373080 child.gif
23
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
7373081 email.gif
7373076 indigo.gif
The above command displays filename with inode value.
ln COMMAND:
ln command is used to create link to a file (or) directory. It helps to provide soft link for
desired files. Inode will be different for source and destination.
SYNTAX:
The
Syntax is
ln [options] existingfile(or directory)name newfile(or directory)name
OPTIONS:
Link files without questioning the user, even if the mode of target forbids
-f
writing. This is the default if the standard input is not a terminal.
-n Does not overwrite existing files.
-s Used to create soft links.
EXAMPLE:
1. ln -s file1.txt file2.txt
Creates a symbolic link to 'file1.txt' with the name of 'file2.txt'. Here inode for
'file1.txt' and 'file2.txt' will be different.
2. ln -s nimi nimi1
Creates a symbolic link to 'nimi' with the name of 'nimi1'.
chown COMMAND:
chown command is used to change the owner / user of the file or directory. This is an
admin command, root user only can change the owner of a file or directory.
SYNTAX:
The Syntax is
chown [options] newowner filename/directoryname
24
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
OPTIONS:
Change the permission on files that are in the subdirectories of the directory
-R
that you are currently in.
-c Change the permission for each file.
Prevents chown from displaying error messages when it is unable to change
-f
the ownership of a file.
EXAMPLE:
The owner of the 'test.txt' file is root, Change to new user hiox.
The owner of the 'test' directory is root, With -R option the files and subdirectories
user also gets changed.
Here change the owner for the specific 'calc.txt' file only.
Security By File
Permissions chmod
Command:
chmod command allows you to alter / Change access rights to files and directories.
25
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
User
Group
Others
Permission 000
Symbolic
Mode
SYNTAX:
The Syntax is
chmod [options] [MODE] FileName
File Permission
# File Permission
0 none
1 execute only
2 write only
3 write and execute
4 read only
5 read and execute
6 read and write
7 set all permissions
OPTIONS:
-c Displays names of only those files whose permissions are being changed
-f Suppress most error messages
-R Change files and directories recursively
26
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
ls -alt
This command is used to view your files with what permission they are.
SYNTAX:
The Syntax is
mkdir [options] directories
OPTIONS:
1. Create directory:
27
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
mkdir test
The above command is used to create the directory 'test' and set the read and write
permission.
rmdir COMMAND:
rmdir command is used to delete/remove a directory and its subdirectories.
SYNTAX:
The Syntax is
rmdir [options..] Directory
OPTIONS:
Allow users to remove the directory dirname and its parent directories which
-p
become empty.
EXAMPLE:
1. To delete/remove a directory
rmdir tmp
rmdir command will remove/delete the directory tmp if the directory is empty.
rm -ir tmp
28
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
This command recursively removes the contents of all subdirectories of the tmp
directory, prompting you regarding the removal of each file, and then removes the tmp
directory itself.
mv COMMAND:
mv command which is short for move. It is used to move/rename file from one directory to
another. mv command is different from cp command as it completely removes the file from the
source and moves to the directory specified, where cp command just copies the content from one
file to another.
SYNTAX:
The Syntax is
mv [-f] [-i] oldname newname
OPTIONS:
mv file1.txt file2.txt
2. To move a directory
mv hscripts tmp
29
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
In the above line mv command moves all the files, directories and sub-directories from
hscripts folder/directory to tmp directory if the tmp directory already exists. If there is no
tmp directory it rename's the hscripts directory as tmp directory.
This command moves the files file1.txt from the current directory and file2.txt from the
tmp folder/directory to newdir.
diff COMMAND:
diff command is used to find differences between two files.
SYNTAX:
The Syntax is
diff [options..] from-file to-file
OPTIONS:
30
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
Lets create two files file1.txt and file2.txt and let it have the following data.
This command will compare the file file1.txt with file2.txt ignoring white/blank space
and it will produce the following output.
2c2
< hscripts.com
---
> HSCRIPTS.com
4d3
< Hioxindia.com
31
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
This command will compare the files ignoring white/blank space, It is easier to
differentiate the files.
hscripts.com | HSCRIPTS.com
with friend ship with friend ship
Hioxindia.com <
The third line(with friend ship) in file2.txt has more blank spaces, but still the -b ignores
the blank space and does not show changes in the particular line, -y printout the result
side by side.
This command will compare the files ignoring case(upper-case and lower-case) and
displays the following output.
chgrp COMMAND:
chgrp command is used to change the group of the file or directory. This is an admin
command. Root user only can change the group of the file or directory.
SYNTAX:
The Syntax is
chgrp [options] newgroup filename/directoryname
OPTIONS:
32
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
Change the permission on files that are in the subdirectories of the directory
-R
that you are currently in.
-c Change the permission for each file.
-f Force. Do not report errors.
Hioxindia.com <
EXAMPLE:
The group of 'test' directory is root. With -R, the files and its subdirectories also changes
to newgroup hiox.
They above command is used to change the group for the specific file('calc.txt') only.
About wc
Short for word count, wc displays a count of lines, words, and characters in a file.
Syntax
-c Count bytes.
-m Count characters.
-C Same as -m.
33
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
-l Count lines.
Examples
wc myfile.txt - Displays information about the file myfile.txt. Below is an example of the output.
5 13 57 myfile.txt
5 = Lines
13 = Words
57 = Characters
About split
Syntax
-a Use suffixlength letters to form the suffix portion of the filenames of the split
suffixlength file. If -a is not specified, the default suffix length is 2. If the sum of the name
operand and the suffixlength option-argument would create a filename exceeding
NAME_MAX bytes, an error will result; split will exit with a diagnostic message
34
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
File The path name of the ordinary file to be split. If no input file is given or file is -,
the standard input will be used.
name The prefix to be used for each of the files resulting from the split operation. If no
name argument is given, x will be used as the prefix of the output files. The
combined length of the basename of prefix and suffixlength cannot exceed
NAME_MAX bytes; see OPTIONS.
Examples
split -b 22 newfile.txt new - would split the file "newfile.txt" into three separate files called
newaa, newab and newac each file the size of 22.
split -l 300 file.txt new - would split the file "newfile.txt" into files beginning with the name
"new" each containing 300 lines of text each
Syntax
-a Change the access time of file. Do not change the modification time unless -m is
also specified.
35
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
-c Do not create a specified file if it does not exist. Do not write any diagnostic
messages concerning this condition.
-m Change the modification time of file. Do not change the access time unless -a is
also specified.
-r ref_file Use the corresponding times of the file named by ref_file instead of the current
time.
-t time Use the specified time instead of the current time. time will be a decimal number
of the form:
[[CC]YY]MMDDhhmm [.SS]
-f ref_file Use the corresponding times of the file named by ref_file instead of the current
time.
Examples
settime myfile.txt
touch newfile.txt
36
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
Creates a file known as "newfile.txt", if the file does not already exist. If the file already exists
the accessed / modification time is updated for the file newfile.txt
About comm
Syntax
Examples
The above example would compare the two files myfile1.txt and myfile2.txt.
Process utilities:
ps Command:
ps command is used to report the process status. ps is the short name for Process Status.
SYNTAX:
The Syntax is
ps [options]
37
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
OPTIONS:
List information about all processes most frequently requested: all those
-a
except process group leaders and processes not associated with a terminal..
-A or e List information for all processes.
-d List information about all processes except session leaders.
-e List information about every process now running.
-f Generates a full listing.
-j Print session ID and process group ID.
-l Generate a long listing.
EXAMPLE:
1. ps
Output:
In the above example, typing ps alone would list the current running processes.
2. ps -f
Output:
38
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
kill COMMAND:
kill command is used to kill the background process.
SYNTAX:
The Syntax is
kill [-s] [-l] %pid
OPTIONS:
Specify the signal to send. The signal may be given as a signal name or
-s
number.
Write all values of signal supported by the implementation, if no operand is
-l
given.
-pid Process id or job id.
-9 Force to kill a process.
EXAMPLE:
39
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
About nice
Syntax
The super-user may run commands with priority higher than normal by using a
negative increment such as -10. A negative increment assigned by an
unprivileged user is ignored.
command The name of a command that is to be invoked. If command names any of the
special built-in utilities, the results are undefined.
Examples
nice +13 pico myfile.txt - runs the pico command on myfile.txt with an increment of +13.
About at
Schedules a command to be ran at a particular time, such as a print job late at night.
Syntax
atq lists the user's pending jobs, unless the user is the superuser; in that case, everybody's jobs
are listed. The format of the output lines (one for each job) is: Job number, date, hour, job
40
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
class.
batch executes commands when system load levels permit; in other words, when the load
average drops below 1.5, or the value specified in the invocation of atrun.
at [-c | -k | -s] [-f filename] [-q queuename] [-m] -t time [date] [-l] [-r]
-t time Specifies at what time you want the command to be ran. Format hh:mm. am / pm
indication can also follow the time otherwise a 24-hour clock is used. A timezone
name of GMT, UCT or ZULU (case insensitive) can follow to specify that the
time is in Coordinated Universal Time. Other timezones can be specified using
the TZ environment variable. The below quick times can also be entered:
date Specifies the date you wish it to be ran on. Format month, date, year. The
following quick days can also be entered:
41
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
Examples
at -m 01:35 < atjob = Run the commands listed in the 'atjob' file at 1:35AM, in addition all
output that is generated from job mail to the user running the task. When this command has been
successfully enter you should receive a prompt similar to the below example.
at -l = This command will list each of the scheduled jobs as seen below.
or
If you wish to create a job that is repeated you could modify the file that executes the commands
with another command that recreates the job or better yet use the crontab command.
Note: Performing just the at command at the prompt will give you an error "Garbled Time", this
is a standard error message if no switch or time setting is given.
Disk utilities:
du (abbreviated from disk usage) is a standard Unix program used to estimate file space
usage—space used under a particular directory or files on a file system.
du takes a single argument, specifying a pathname for du to work; if it is not specified, the current
directory is used. The SUS mandates for du the following options:
-a, display an entry for each file (and not directory) contained in the current directory
42
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
-H, calculate disk usage for link references specified on the command line
-s, report only the sum of the usage in the current directory, not for each file
-x, only traverse files and directories on the device on which the pathname argument is
specified.
Other Unix and Unix-like operating systems may add extra options. For example, BSD and GNU
du specify a -h option, displaying disk usage in a format easier to read by the user, adding units
with the appropriate SI prefix’
$ du -sk *
152304 directoryOne
1856548 directoryTwo
Sum of directories in human-readable format (Byte, Kilobyte, Megabyte, Gigabyte, Terabyte and
Petabyte):
$ du -sh *
149M directoryOne
1.8G directoryTwo
disk usage of all subdirectories and files including hidden files within the current directory
(sorted by filesize) :
disk usage of all subdirectories and files including hidden files within the current directory
(sorted by reverse filesize) :
$ du -d 1 -c -h
43
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
Output:
du command examples
du shows how much space one ore more files or directories is using.
$ du -sh
103M
-s option summarize the space a directory is using and -h option provides "Human-readable"
output.
Networking commands:
These are most useful commands in my list while working on Linux server , this enables you to
quickly troubleshoot connection issues e.g. whether other system is connected or not , whether
other host is responding or not and while working for FIX connectivity for advanced trading
system this tools saves quite a lot of time .
44
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
This article is in continuation of my article How to work fast in Unix and Unix Command
tutorials and Examples for beginners.
• finding host/domain name and IP address - hostname
• test network connection – ping
• getting network configuration – ifconfig
• Network connections, routing tables, interface statistics – netstat
• query DNS lookup name – nslookup
• communicate with other hostname – telnet
• outing steps that packets take to get to network host – traceroute
• view user information – finger
• checking status of destination host - telnet
let's see some example of various networking command in Unix and Linux. Some of them are
quite basic e.g. ping and telnet and some are more powerful e.g. nslookup and netstat. When you
used these commands in combination of find and grep you can get anything you are looking for
e.g. hostname, connection end points, connection status etc.
hostname
ping
It sends packets of information to the user-defined source. If the packets are received, the
destination device sends packets back. Ping can be used for two purposes
If you do ping www.yahoo.com it will display its IP address. Use ctrl+C to stop the test.
ifconfig
View network configuration, it displays the current network adapter configuration. It is handy to
45
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
netstat
Most useful and very versatile for finding connection to and from the host. You can find out all
the multicast groups (network) subscribed by this host by issuing "netstat -g"
netstat -nap | grep port will display process id of application which is using that port
netstat -a or netstat –all will display all connections including TCP and UDP
netstat --tcp or netstat –t will display only TCP connection
netstat --udp or netstat –u will display only UDP connection
netstat -g will display all multicast network subscribed by this host.
nslookup
If you know the IP address it will display hostname. To find all the IP addresses for a given
domain name, the command nslookup is used. You must have a connection to the internet for
this utility to be useful.
E.g. nslookup blogger.com
You can also use nslookup to convert hostname to IP Address and from IP Address from
hostname.
traceroute
A handy utility to view the number of hops and response time to get to a remote system or web
site is traceroute. Again you need an internet connection to make use of this tool.
finger
View user information, displays a user’s login name, real name, terminal name and write status.
this is pretty old unix command and rarely used now days.
telnet
Connects destination host via telnet protocol, if telnet connection establish on any port means
connectivity between two hosts is working fine.
telnet hostname port will telnet hostname with the port specified. Normally it is used to see
whether host is alive and network connection is fine or not.
Linux is most powerful operating system which often needs to use commands to explore it
effectively.Some of the commands are restricted to normal user groups as they are powerful and
has more functionality involved in it.Here we summarized most interesting and useful
networking commands which every linux user are supposed to be familiar with it.
46
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
1.Arp manipulates the kernel’s ARP cache in various ways. The primary options are clearing
an address mapping entry and manually setting up one. For debugging purposes, the arp
program also allows a complete dump of the ARP cache.ARP displays the IP address assigned to
particular ETH card and mac address
[fasil@smashtech ]# arp
Address HWtype HWaddress Flags Mask Iface
59.36.13.1 ether C eth0
2.Ifconfig is used to configure the network interfaces. Normally we use this command to check
the IP address assigned to the system.It is used at boot time to set up interfaces as
necessary. After that, it is usually only needed when debugging or when system tuning is
needed.
3. Netstat prints information about the networking subsystem. The type of information which is
usually printed by netstat are Print network connections, routing tables, interface statistics,
masquerade connections, and multicast.
47
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
5. Nslookup is a program to query Internet domain name servers. Nslookup has two modes:
interactive and non-interactive. Interactive mode allows the user to query name servers for
information about various hosts and domains or to print a list of hosts in a domain. Non-
interactive mode is used to print just the name and requested information for a host or domain.
Non-authoritative answer:
Name: google.com
Address: 209.85.171.100
Name: google.com
Address: 74.125.45.100
Name: google.com
Address: 74.125.67.100
6. dig (domain information groper) is a flexible tool for interrogating DNS name servers. It
performs DNS lookups and displays the answers that are returned from the name server(s) that
were queried. Most DNS administrators use dig to troubleshoot DNS problems because of its
flexibility, ease of use and clarity of output. Other lookup tools tend to have less functionality
than dig.
48
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
;; QUESTION SECTION:
;google.com. IN A
;; ANSWER SECTION:
google.com. 122 IN A 74.125.45.100
google.com. 122 IN A 74.125.67.100
google.com. 122 IN A 209.85.171.100
;; AUTHORITY SECTION:
google.com. 326567 IN NS ns3.google.com.
google.com. 326567 IN NS ns4.google.com.
google.com. 326567 IN NS ns1.google.com.
google.com. 326567 IN NS ns2.google.com.
;; ADDITIONAL SECTION:
ns1.google.com. 152216 IN A 216.239.32.10
ns2.google.com. 152216 IN A 216.239.34.10
ns3.google.com. 152216 IN A 216.239.36.10
ns4.google.com. 152216 IN A 216.239.38.10
7. Route manipulates the IP routing tables. Its primary use is to set up static routes to specific
hosts or networks via an interface after it has been configured with the ifconfig program.When
the add or del options are used, route modifies the routing tables. Without these options, route
displays the current contents of the routing tables.
49
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
Traceroute utilizes the IP protocol ‘time to live’ field and attempts to elicit an ICMP
TIME_EXCEEDED response from each gateway along the path to some host. The only
mandatory parameter is the destination host name or IP number. The default probe
datagram length is 40 bytes, but this may be increased by specifying a packet length (in bytes)
after the destination host name.
9.W-displays information about the users currently on the machine, and their processes. The
header shows, in this order, the current time, how long the system has been running, how many
users are currently logged on, and the system load averages for the past 1, 5, and 15 minutes.
[fasil@smashtechl ~]# w
15:18:22 up 4:38, 3 users, load average: 0.89, 0.34, 0.19
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root :0 - 10:41 ?xdm? 24:53 1.35s /usr/bin/gnome-session
root pts/1 :0.0 10:58 1.00s 0.34s 0.00s w
root pts/2 :0.0 12:10 23:32 0.03s 0.03s bash
Filters:
more COMMAND:
more command is used to display text in the terminal screen. It allows only backward
movement.
50
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
SYNTAX:
The Syntax is
more [options] filename
OPTIONS:
1. more -c index.php
2. more -3 index.php
Prints first three lines of the given file. Press Enter to display the file line by line.
head COMMAND:
head command is used to display the first ten lines of a file, and also specifies how many lines
to display.
SYNTAX:
The Syntax is
head [options] filename
OPTIONS:
51
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
1. head index.php
2. head -5 index.php
3. head -c 5 index.php
tail COMMAND:
tail command is used to display the last or bottom part of the file. By default it displays last
10 lines of a file.
SYNTAX:
The Syntax is
tail [options] filename
OPTIONS:
52
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
The number option-argument must be a decimal integer whose sign affects the
-n number
location in the file, measured in lines.
EXAMPLE:
1. tail index.php
2. tail -2 index.php
3. tail -n 5 index.php
4. tail -c 5 index.php
cut COMMAND:
cut command is used to cut out selected fields of each line of a file. The cut command uses
delimiters to determine where to split fields.
SYNTAX:
The Syntax is
cut [options]
OPTIONS:
53
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
EXAMPLE:
1. cut -c1-3 text.txt
Output:
Thi
Output:
The above command is used to split the fields using delimiter and cut the first two fields.
paste COMMAND:
paste command is used to paste the content from one file to another file. It is also used to set
column format for each line.
SYNTAX:
The Syntax is
paste [options]
OPTIONS:
1. paste test.txt>test1.txt
54
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
2. ls | paste - - - -
List all files and directories in four columns for each line.
sort COMMAND:
sort command is used to sort the lines in a text file.
SYNTAX:
The Syntax is
sort [options] filename
OPTIONS:
1. sort test.txt
2. sort -r test.txt
Sorts the 'test.txt' file in reverse order and prints result in the screen.
About uniq
Syntax
-c Precede each output line with a count of the number of times the line occurred in
55
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
the input.
-d Suppress the writing of lines that are not repeated in the input.
-f fields Ignore the first fields fields on each input line when doing comparisons, where
fields is a positive decimal integer. A field is the maximal string matched by the
basic regular expression:
[[:blank:]]*[^[:blank:]]*
If fields specifies more fields than appear on an input line, a null string will be
used for comparison.
-s char Ignore the first chars characters when doing comparisons, where chars is a
positive decimal integer. If specified in conjunction with the -f option, the first
chars characters after the first fields fields will be ignored. If chars specifies more
characters than remain on an input line, a null string will be used for comparison.
input_file A path name of the input file. If input_file is not specified, or if the input_file is -
, the
standard input will be used.
output_file A path name of the output file. If output_file is not specified, the standard output
will be used. The results are unspecified if the file named by output_file is the
file named by input_file.
Examples
uniq myfile1.txt > myfile2.txt - Removes duplicate lines in the first file1.txt and outputs the
results to the second file.
56
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
About tr
Translate characters.
Syntax
Examples
echo "12345678 9247" | tr 123456789 computerh - this example takes an echo response of
'12345678 9247' and pipes it through the tr replacing the appropriate numbers with the letters. In
this example it would return computer hope.
tr -cd '\11\12\40-\176' < myfile1 > myfile2 - this example would take the file myfile1 and strip
all non printable characters and take that results to myfile2.
cat n
file1.txt
57
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
echo $HOME
eg. wc file1.txt
wc L
file1.txt
sort r
file1.txt
General Commands:
date COMMAND:
date command prints the date and time.
SYNTAX:
The Syntax is
date [options] [+format] [date]
OPTIONS:
Slowly adjust the time by sss.fff seconds (fff represents fractions of a second).
-a
This adjustment can be positive or negative.Only system admin/ super user
58
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
- date - Sets the time and date to the value specfied in the datestring. The datestr may
string contain the month names, timezones, 'am', 'pm', etc.
-u Display (or set) the date in Greenwich Mean Time (GMT-universal time).
Format:
%a Abbreviated weekday(Tue).
%A Full weekday(Tuesday).
%t Tab space.
EXAMPLE:
date command
date
The above command will print Wed Jul 23 10:52:34 IST 2008
59
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
date -V
The above command will print Wed Oct 08 11:37:23 IST 2008
who COMMAND:
who command can list the names of users currently logged in, their terminal, the time they
have been logged in, and the name of the host from which they have logged in.
SYNTAX:
The Syntax is
who [options] [file]
OPTIONS:
Print the username of the invoking user, The 'am' and 'i' must be space
am i
separated.
-b Prints time of last system boot.
-d print dead processes.
-H Print column headings above the output.
-i Include idle time as HOURS:MINUTES. An idle time of . indicates activity
60
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
1. who –Uh
Output:
This sample output was produced at 11 a.m. The "." indiacates activity within the last
minute.
2. who am i
echo COMMAND:
echo command prints the given input string to standard output.
SYNTAX:
The Syntax is
echo [options..] [string]
OPTIONS:
61
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
EXAMPLE:
echo command
echo "hscripts Hiox India"
1. To use backspace:
echo -e "hscripts\tHiox\tIndia"
62
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
passwd COMMAND:
passwd command is used to change your password.
SYNTAX:
The Syntax is
passwd [options]
OPTIONS:
1. passwd
Entering just passwd would allow you to change the password. After entering passwd you
will receive the following three prompts:
Current Password:
New Password:
Confirm New Password:
Each of these prompts must be entered correctly for the password to be successfully
changed.
pwd COMMAND:
pwd - Print Working Directory. pwd command prints the full filename of the current working
directory.
63
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
SYNTAX:
The Syntax is
pwd [options]
OPTIONS:
pwd
If you are working in home directory then, pwd command displays the current working
directory as /home.
cal COMMAND:
cal command is used to display the calendar.
SYNTAX:
The Syntax is
cal [options] [month] [year]
OPTIONS:
64
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
1. cal
Output:
September 2008
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
2. cal -3 5 2008
Output:
Here the cal command displays the calendar of April, May and June month of year 2008.
login Command
65
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
Syntax
-d device login accepts a device option, device. device is taken to be the path name of the
TTY port login is to operate on. The use of the device option can be expected to
improve login performance, since login will not need to call ttyname. The -d
option is available only to users whose UID and effective UID are root. Any
other attempt to use -d will cause login to quietly exit.
-h hostname | Used by in.telnetd to pass information about the remote host and terminal type.
terminal
Examples
uname command
Syntax
uname [-a] [-i] [-m] [-n] [-p] [-r] [-s] [-v] [-X] [-S systemname]
66
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
-m Print the machine hardware name (class). Use of this option is discouraged; use
uname -p instead.
-n Print the nodename (the nodename is the name by which the system is known to
a communications network).
Examples
uname -arv
List the basic system information, OS release, and OS version as shown below.
67
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
uname -p
SED:
What is sed?
68
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
Sed Operation
69
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
subsequent commands are applied to line in the pattern space, not the
original input line
once finished, line is sent to output
address determines which lines in the input file are to be processed by the command(s)
if no address is specified, then the command is applied to each input line
address types:
Single-Line address
Set-of-Lines address
Range address
Nested address
Single-Line Address
Examples:
70
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
Set-of-Lines Address
Examples:
Range Address
Format:
start-addr,end-addr (inclusive)
Examples:
10,50 line-number,line-number
10,/R.E/ line-number,/RegExp/
/R.E./,10 /RegExp/,line-number
71
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
/R.E./,/R.E/ /RegExp/,/RegExp/
BEGIN
Line 1 of input
Line 2 of input
Line3 of input
END
Line 4 of input
Line 5 of input
Nested Address
Example:
20,30{
/^$/ p
Address with !
72
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
instruction will be applied to all lines that do not match the address
Example:
sed commands
Line Number
line number command (=) writes the current line number before each matched/output line
Examples:
modify commands
73
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
Insert Command: i
adds one or more lines directly to the output before the address:
inserted “text” never appears in sed’s pattern space
cannot be used with a range address; can only be used with the single-line and set-
of-lines address types
Syntax:
[address] i\
text
Append Command: a
adds one or more lines directly to the output after the address:
Similar to the insert command (i), append cannot be used with a range address.
Appended “text” does not appear in sed’s pattern space.
Syntax:
[address] a\
text
Change Command: c
74
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
Syntax:
[address1[,address2]] c\
text
Delete Command: d
Syntax:
[address1[,address2]] d
Syntax:
[addr1][,addr2] s/search/replace/[flags]
75
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
$ cat datafile
76
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
Syntax:
[addr1][,addr2]y/a/b/
77
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
Example:
78
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
prints the contents of the pattern space up to and including a new line character
any text following the first new line is not printed
Hold Space
4 commands that can be used to move text back and forth between the pattern space and
the hold space:
h, H
g, G
File commands
allows to read and write from/to file while processing standard input
read: r command
write: w command
Syntax: r filename
queue the contents of filename to be read and inserted into the output stream at
the end of the current cycle, or when the next input line is read
79
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
Syntax: w filename
Syntax: [addr1][,addr2]b[label]
Branch label
:mylabel
Syntax: [addr]q
80
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
Same as:
Awk
What is awk?
awk operation:
scans a file line by line
splits each input line into fields
compares input line/fields to pattern
performs action(s) on matched lines
Useful for:
transform data files
produce formatted reports
Programming constructs:
format output lines
arithmetic and string operations
conditionals and loops
81
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
Options:
pattern {action}
82
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
Example:
83
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
Buffers
field buffer:
one for each fields in the current record.
names: $1, $2, …
record buffer :
$0 holds the entire record
84
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
% cat emps
% cat emps
85
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
% cat em2
Tom Jones:4424:5/12/66:543354
Mary Adams:5346:11/4/63:28765
Sally Chang:1654:7/22/54:650000
Billy Black:1683:9/23/44:336500
awk Scripts
86
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
BEGIN: pre-processing
performs processing that must be completed before the file processing starts (i.e.,
before awk starts reading records from the input file)
useful for initialization tasks such as to initialize variables and to create report
headings
BODY: Processing
contains main processing logic to be applied to input records
like a loop that processes input data one record at a time:
if a file contains 100 records, the body will be executed 100 times, one for
each record
END: post-processing
contains logic to be executed after all input data have been processed
logic such as printing report grand total should be performed in this part of the
script
87
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
Categories of Patterns
match
entire input record
expression operators
arithmetic
relational
logical
% cat employees2
Tom Jones:4424:5/12/66:543354
Mary Adams:5346:11/4/63:28765
88
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
Sally Chang:1654:7/22/54:650000
Billy Black:1683:9/23/44:336500
Sally Chang:1654:7/22/54:650000
Billy Black:1683:9/23/44:336500
% cat datafile
89
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
northwest NW
southwest SW
southern SO
north NO
central CT
northwest
southwest
southern
southeast
northeast
north
Arithmetic Operators
+ Add x+y
- Subtract x–y
* Multiply x*y
90
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
/ Divide x/y
% Modulus x%y
^ Exponential x^y
Example:
Relational Operators
== Equal to x == y
!= Not equal to x != y
Logical Operators
|| Logical OR a || b
91
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
! NOT !a
Examples:
% awk '($2 > 5) && ($2 <= 15) {print $0}' file
Range Patterns
Syntax:
92
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
awk Actions
awk expressions
awk variables
93
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
awk Variables
Format:
variable = expression
Examples:
left-hand-side variable
++ Add 1 to variable
Awk example
94
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
File: grades
john 85 92 78 94 88
andrea 89 90 75 90 86
jasper 84 88 80 92 84
{ total = $2 + $3 + $4 + $5 + $6
avg = total / 5
Run as:
Output Statements
printf
sprintf
Function: print
95
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
print example
john 85 92 78 94 88
andrea 89 90 75 90 86
john 85 92 78 94 88
andrea 89 90 75 90 86
john 85 92 78 94 88
andrea 89 90 75 90 86
> “file”
96
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
>> “file”
| “command”
print Example
% cat file
john 85
andrea 89
jasper 84
andrea 89
jasper 84
john 85
jasper 84
john 85
andrea 89
% date
97
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
% date |
Mo0nth: Nov
Year: 2008
Syntax:
Format specifiers
%d %i decimal integer
%c single character
%s string of characters
%o octal number
%x hexadecimal number
98
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
%10s
%7d
%10.4f
%-20s
meaning:
width of field, field is printed right justified
precision: number of digits after decimal point
“-” will left justify
Syntax:
Example:
99
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
print text
awk Array
Arrays in awk
Syntax:
arrayName[index] = value
Examples:
list[1] = "one"
list[2] = "three"
100
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
divides string into pieces separated by fieldsep, and stores the pieces in array
if the fieldsep is omitted, the value of FS is used.
Example:
split("auto-da-fe", a, "-")
a[1] = "auto"
a[2] = "da"
a[3] = "fe"
input file:
101
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
output:
summary of category sales
102
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
% cat sales.awk
deptSales[$2] += $3
END {
for (x in deptSales)
103
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
print x, deptSales[x]
tolower(string)
toupper(string)
103:sway bar:49.99
101:propeller:104.99
104:fishing line:0.99
106:cup holder:2.49
107:cooler:14.89
112:boat cover:120.00
104
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
109:transom:199.00
110:pulley:9.88
105:mirror:4.99
108:wheel:49.99
111:lock:31.00
102:trailer hitch:97.95
Marine Parts R Us
Main catalog
======================================
105
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
======================================
BEGIN {
FS= ":"
print "======================================"
count++
106
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
END {
print "======================================"
Applications:
Conditional
if-else
Repetition
for
with counter
with array index
while
do-while
also: break, continue
if Statement
Syntax:
if (conditional expression)
statement-1
else
statement-2
Example:
107
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
if ( NR < 3 )
print $2
else
print $3
for Loop
Syntax:
statement
Example:
total += $i
count++
Syntax:
statement
Example:
108
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
for (x in deptSales)
print x, deptSales[x]
While Loop
Syntax:
statement
Example:
i=1
print i, $i
i++
do-while Loop
Syntax:
do
statement
109
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
while (condition)
Example:
i=1
do {
print $0
i++
break
exits loop
continue
Shell Programming
The shell has similarities to the DOS command processor Command.com (actually Dos was
design as a poor copy of UNIX shell), it's actually much more powerful, really a programming
language in its own right.
A shell is always available on even the most basic UNIX installation. You have to go through the
shell to get other programs to run. You can write programs using the shell. You use the shell to
administrate your UNIX system. For example:
ls -al | more
is a short shell program to get a long listing of the present directory and route the output through
the more command.
110
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
What is a Shell?
A shell is a program that acts as the interface between you and the UNIX system, allowing you
to enter commands for the operating system to execute.
• The Bourne shell, or sh, was the default Unix shell of Unix Version 7. It was developed
by Stephen Bourne, of AT&T Bell Laboratories.
• A Unix shell, also called "the command line", provides the traditional user interface for
the Unix operating system and for Unix-like systems. Users direct the operation of the
computer by entering command input as text for a shell to execute.
• There are many different shells in use. They are
– Bourne shell (sh)
– C shell (csh)
– Korn shell (ksh)
Bourne Again shell (bash)
111
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
• When we issue a command the shell is the first agency to acquire the information. It
accepts and interprets user requests. The shell examines &rebuilds the commands
&leaves the execution work to kernel. The kernel handles the h/w on behalf of these
commands &all processes in the system.
• The shell is generally sleeping. It wakes up when an input is keyed in at the prompt. This
input is actually input to the program that represents the shell.
•
Shell responsibilities
1. Program Execution
2. Variable and Filename Substitution
3. I/O Redirection
4. Pipeline Hookup
5. Environment Control
6. Interpreted Programming Language
1.Program Execution:
• The shell is responsible for the execution of all programs that you request from your
terminal.
• Each time you type in a line to the shell, the shell analyzes the line and then determines
what to do.
• The line that is typed to the shell is known more formally as the command line. The shell
scans this command line and determines the name of the program to be executed and
what arguments to pass to the program.
2.Variable and Filename Substitution:
• Like any other programming language, the shell lets you assign values to variables.
Whenever you specify one of these variables on the command line, preceded by a dollar
sign, the shell substitutes the value assigned to the variable at that point.
3.I/O Redirection:
• It is the shell's responsibility to take care of input and output redirection on the command
line. It scans the command line for the occurrence of the special redirection characters <,
>, or >>.
4.Pipeline Hookup:
• Just as the shell scans the command line looking for redirection characters, it also looks
for the pipe character |. For each such character that it finds, it connects the standard
output from the command preceding the | to the standard input of the one following the |.
It then initiates execution of both programs.
5.Environment Control:
• The shell provides certain commands that let you customize your environment. Your
environment includes home directory, the characters that the shell displays to prompt you
112
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
to type in a command, and a list of the directories to be searched whenever you request
that a program be executed.
• The shell has its own built-in programming language. This language is interpreted,
meaning that the shell analyzes each statement in the language one line at a time and then
executes it. This differs from programming languages such as C and FORTRAN, in
which the programming statements are typically compiled into a machine-executable
form before they are executed.
• Programs developed in interpreted programming languages are typically easier to debug
and modify than compiled ones. However, they usually take much longer to execute than
their compiled equivalents.
Pipes connect processes together. The input and output of UNIX programs can be redirected.
Redirecting Output
ls -l > lsoutput.txt
redirects the output of the list command from the screen to the file lsoutput.txt.
ps >> lsoutput.txt
Redirecting Input
Pipes
We can connect processes together using the pipe operator ( | ). For example, the following
program means run the ps program, sort its output, and save it in the file pssort.out
Here Documents
113
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
A here document is a special way of passing input to a command from a shell script. The
document starts and ends with the same leader after <<. For example:
#!/bin/sh
How It Works
You can type in a sequence of commands and allow the shell to execute them interactively, or
youu can sotre these commands in a file which you can invoke as a program.
Interactive Programs
A quick way of trying out small code fragments is to just type in the shell script on the command
line. Here is a shell program to compile only files that contain the string POSIX.
Creating a Script
To create a shell script first use a text editor to create a file containing the commands. For
example, type the following commands and save them as first.sh
114
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
The line
#!/bin/sh
is special and tells the system to use the /bin/sh program to execute this program.
The command
exit 0
Causes the script program to exit and return a value of 0, which means there were not errors.
There are two ways to execute the script. 1) invoke the shell with the name of the script file as a
parameter, thus:
/bin/sh first.sh
Or 2) change the mode of the script to executable and then after execute it by just typing its
name.
chmod +x first.sh
first.sh
Actually, you may need to type:
./first.sh
to make the file execute unles the path variable has your directory in it.
Shell Syntax
The modern UNIX shell can be used to write quite large, structured programs.
Shell metacharacters
115
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
The shell consists of large no. of metacharacters. These characters plays vital role in Unix
programming.
Types of metacharacters:
1.File substitution
2.I/O redirection
3.Process execution
4.Quoting metacharacters
5.Positional parameters
6.Special characters
7.Command substitution
Filename substitution:
Metacharacter significance
Shell Variables
Variables are generally created when you first use them. By default, all variables are considered
and stored as strings. Variable names are case sensitive.
116
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
U can define & use variables both in the command line and shell scripts. These variables
are called shell variables.
No type declaration is necessary before u can use a shell variable.
Variables provide the ability to store and manipulate the information with in the shell
program. The variables are completely under the control of user.
Variables in Unix are of two types.
1) User-defined variables:
Generalized form:
variable=value.
Eg: $x=10
$echo $x
10
$unset x
All shell variables are initialized to null strings by default. To explicitly set null values
use
x= or x=‘’ or x=“”
117
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
2) Environment Variables
They are initialized when the shell script starts and normally capitalized to
distinguish them from user-defined variables in scripts
To display all variables in the local shell and their values, type the set command
The unset command removes the variable from the current shell and sub shell
$# No . of parameters passed
$$ Process ID of the shell script
read:
The read statement is a tool for taking input from the user i.e. making scripts
interactive. It is used with one or more variables. Input supplied through the
standard input is read into these variables.
$read name
name. printf:
Eg:
118
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
This is a number: 10
Every command returns a value after execution .This value is called the exit
status or return value of a command.
This value is said to be true if the command executes successfully and false if it fails.
There is special parameter used by the shell it is the $?. It stores the exit status
of a command.
exit:
The exit statement is used to prematurely terminate a program. When this statement is
encountered in a script, execution is halted and control is returned to the calling
program- in most cases the shell.
U don’t need to place exit at the end of every shell script because the shell knows
when script execution is complete.
set:
Set is used to produce the list of currently defined variables.
$set
It is a null command.
In some older shell scripts, colon was used at the start of a line to introduce a
comment, but modern scripts uses # now.
expr:
The expr command evaluates its arguments as an expression:
$ expr 8 + 6
14
$ x=`expr 12 / 4 `
$ echo $x
3
export:
119
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
There is a way to make the value of a variable known to a sub shell, and that's
by exporting it with the export command. The format of this command is
export variables
where variables is the list of variable names that you want exported. For any sub
shells that get executed from that point on, the value of the exported variables will be
passed down to the sub shell.
eval:
eval scans the command line twice before executing it. General form for eval
is eval command-line
Eg:
$ cat last
${n}
If u supply more than nine arguments to a program, u cannot access the tenth and greater
arguments with $10, $11, and so on.
${n} must be used. So to directly access argument 10, you must write
${10}
Shift command:
The shift command allows u to effectively left shift your positional parameters. If u execute
the command
Shift
whatever was previously stored inside $2 will be assigned to $1, whatever was previously
stored in $3 will be assigned to $2, and so on. The old value of $1 will be irretrievably lost.
It creates the variable salutation, displays its value, and some parameter variables.
120
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
• When a shell starts, some variables are initialized from values in the environment.
Here is a sample of some of them.
Parameter Variables
• If your script is invoked with parameters, some additional variables are created.
Quoting
Normally, parameters are separated by white space, such as a space. Single quot marks can be
used to enclose values containing space(s). Type the following into a file called quot.sh
121
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
How It Works
The variable myvar is created and assigned the string Hi there. The content of the variable is
displyed using the echo $. Double quotes don't effect echoing the value. Single quotes and
backslash do.
Here is how to check for the existance of the file fred.c using the test and using the []
command.
You can even place the then on the same line as the if, if youu add a semicolon before the
word then.
Here are the conditon types that can be used with the test command. There are string
comparison.
122
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
Control Structures
if
The if statement is vary similar other programming languages except it ends with a fi.
if condition
then
statements
else
statements
fi
elif
the elif is better known as "else if". It replaces the else part of an if statement with another if
statement. You can try it out by using the following script.
123
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
#!/bin/sh
if [ $ti0meofday = "yes" ]
then
echo "Good morning"
elif [ $timeofday = "no" ]; then
echo "Good afternoon"
124
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
else
125
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
exit 0
How It Works
The above does a second test on the variable timeofday if it isn't equal to yes.
if [ $timeofday = "yes" ]
looks like
if [ = "yes" ]
which is illegal. This problem can be fixed by using double quotes around the variable name.
if [ "$timeofday" = "yes" ]
.
for
The for construct is used for looping through a range of values, which can be any set of strings.
The syntax is:
How It Works
The above example creates the variable foo and assigns it a different value each time around the
for loop.
126
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
How It Works
Here is another script which uses the $(command) syntax to expand a list to chap3.txt, chap4.txt,
and chap5.txt and print the files.
#!/bin/sh
while
While loops will loop as long as some condition exist. OF course something in the body
statements of the loop should eventually change the condition and cause the loop to exit. Here is
the while loop syntax.
while condition do
statements
done
Here is a whil loop that loops 20 times.
#!/bin/sh
foo=1
exit 0
How It Works
The above script uses the [ ] command to test foo for <= the value 20. The line
foo=$(($fo0o+1))
increments the value of foo each time the loop executes..
until
The until statement loops until a condition becomes true! Its syntax is:
127
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
until condition
do
statements
done
Here is a script using until.
#!/bin/sh
echo -e \\a
echo "**** $1 has just loogged in ****"
exit 0
case
The case statement allows the testing of a variable for more then one value. The case statement
ends with the word esac. Its syntax is:
case variable in
pattern [ | pattern] ...) statements;;
pattern [ | pattern] ...) statements;;
...
esac
Here is a sample script using a case statement:
#!/bin/sh
case "$timeofday" in
"yes") echo "Good Morning";;
"no" ) echo "Good Afternoon";;
0"y" ) echo "Good Morning";;
"n" ) echo "Good Afternoon";;
* ) echo "Soory, answer not recognized";;
esac
exit 0
128
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
The value in the varaible timeofday is compared to various strings. When a match is made, the
associated echo command is executed.
Here is a case where multiple strings are tested at a time, to do the some action.
case "$timeofday" in
"yes" | "y" | "yes" | "YES" ) echo "good Morning";;
"n"* | "N"* ) <echo "Good Afternoon";;
* ) < echo "Sorry, answer not recognized";;
0esac
How It Works
The above has sever strings tested for each possible statement.
Here is a case statement that executes multiple statements for each case.
case "$timeofday" in
"yes" | "y" | "Yes" | "YES" )
echo "Good Morning"
echo "Up bright and early this morning"
;;
[nN]*)
echo "Good Afternoon"
;;
*)
echo "Sorry, answer not recognized"
echo "Please answer yes or noo"
exit 1
;;
esac
How It Works
When a match is found to the variable value of timeofday, all the statements up to the ;; are
executed.
Arithmetic in shell
The $((...)) is a better alternative to the expr command, which allows simple arithmetic
commands to be processed.
x=$(($x+1))
Parameter Expansion
129
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
#!/bin/sh
for i in 1 2
do
my_secret_process ${i}_tmp
done
Here are some of the parameter expansion
How It Works
The try it out exercise uses parameter expansion to demonstrate how parameter expansion works.
Example
#!/bin/sh
read timeofday
else
fi
130
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
exit 0
#!/bin/sh
read timeofday
exit 1
fi exit 0
Interrupt Processing-trap
The trap command is used for secifying the actions to take on receipt of signals. It syntax is:
How It Works
The try it out section has you type in a shell script to test the trap command. It creates a file and
keeps saying that it exists until youu cause a control-C interrupt. It does it all again.
131
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
Functions
function_name () {
statements
}0
Here is a sample function and its execution.
#!/bin/sh
foo() {
echo "Function foo is executing"
}
exit 0
How It Works
When the above script runs, it defines the funcion foo, then script echos script starting, then it
runs the functions foo which echos Function foo is executing, then it echo script ended.
#!/bin/sh
yes_or_no() {
echo "Parameters are $*"
while true
do
echo -n "Enter yes or no"
read x
0case "$x" in
y | yes ) return 0;;
n | no ) return 1;;
* ) echo "Answer yes or no"
esac
done
}
132
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
0exit 0
How It Works
Commands
You can execute normal command and built-in commands from a shell script. Built-in
commands are defined and only run inside of the script.
break
It is used to escape from an enclosing for, while or until loop before the controlling condition has
been met.
The : Command
The colon command is a null command. It can be used for an alias for true..
Continue
The continue command makes the enclosing for, while, or until loop continue at the next
iteration.
The Command
. shell_script
.
133
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
echo
The echo command simply outputs a string to the standard output device followed by a newline
character.
Eval
exec
The exec command can replace the current shell with a different program. It can also modify the
current file descriptors.
exit n
The exit command causes the script to exit with exit code n. An exit code of 0 means success.
Here are some other codes.
export
The export command makes the variable named as its parameter available in subshells.
expr
0x = `expr $x + 1`
Here are some of its expression evaluations
134
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
printf
The printf command is only available in more recent shells. It works similar to the echo
command. Its general form is:
return
The return command causes functions to return. It can have a value parameter which it returns.
set
135
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
The set command sets the parameter variables for the shell.
shift
The shift command moves all the parameters variables down by one, so $2 becomes $1, $3
becomes $2, and so on.
unset
Command Execution
The result of $(command) is simply the output string from the command, which is then available
to the script.
When an error occurs in a script, the shell prints out the line number with an error. You can use
the set command to set various shell option. Here are some of them.
136
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
UNIT-II:
Files and Directories File Concept
File types
File System Structure
File metadata
Inodes
kernel support for files
System calls for file I/O operations
open,create, read, write, close, lseek,dup2
file status information- stat family
137
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
Unit II
In this chapter we learn how to create, open, read, write, and close files.
Programs can use disk files, serial ports, printers and other devices in the exactly the same way
as they would use a file.
File types
Most files on a UNIX system are regular files or directories, but there are additional types of
files:
1. Regular files: The most common type of file, which contains data of some form. There
is no distinction to the UNIX kernel whether this data is text or binary.
2. Directory file: A file contains the names of other files and pointers to information on
these files. Any process that has read permission for a directory file can read the contents
of the directory, but only the kernel can write to a directory file.
3. Character special file: A type of file used for certain types of devices on a system.
4. Block special file: A type of file typically used for disk devices. All devices on a
system are either character special files or block special files.
5. FIFO: A type of file used for interprocess communication between processes. It’s
sometimes called a named pipe.
6. Socket: A type of file used for network communication between processes. A socket
can also be used for nonnetwork communication between processes on a single host.
7. Symbolic link: A type of file that points to another file.
138
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
S_ISSOCK() Socket
A user, neil, usually has his files stores in a 'home' directory, perhaps /home/neil.
139
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
Even hardware devices are represented (mapped) by files in UNIX. For example, as root, you
mount a CD-ROM drive as a file,
File Metadata
Inodes
File attributes
Attribute value meaning
File type type of the file
Access permission file access permission for owner, group and others
140
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
UNIX supports the sharing of open files between different processes. Kernel has three data
structures are used and the relationship among them determines the effect one process has on
another with regard to file sharing.
1. Every process has an entry in the process table. Within each process table entry is a table
of open file descriptors, which is taken as a vector, with one entry per descriptor.
Associated with each file descriptor are
a. The file descriptor flags.
b. A pointer to a file table entry.
2. The kernel maintains a file table for all open files. Each file table entry contains
a. The file status flags for the file(read, write, append, sync, nonblocking, etc.),
b. The current file offset,
c. A pointer to the v-node table entry for the file.
3. Each open file (or device) has a v-node structure. The v-node contains information about
the type of file and pointers to functions that operate on the file. For most files the v-
node also contains the i-node for the file. This information is read from disk when the
file is opened, so that all the pertinent information about the file is readily available.
The arrangement of these three tables for a single process that has two different files open
one file is open on standard input (file descriptor 0) and the other is open standard output
(file descriptor 1).
Here, the first process has the file open descriptor 3 and the second process has file open
descriptor 4. Each process that opens the file gets its own file table entry, but only a single v-
node table entry. One reason each process gets its own file table entry is so that each process has
its own current offset for the file.
After each ‘write’ is complete, the current file offset in the file table entry is incremented
by the number of bytes written. If this causes the current file offset to exceed the current
file size, the current file size, in the i-node table the entry is to the current file offset(Ex:
file is extended).
If a file is opened with O_APPEND flag, a corresponding flag is set in the file status flags
of the file table entry. Each time a ‘write’ is performed for a file with this append flag
141
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
set, the current file offset in the file table entry is first set to the current file size from the
i-node table entry. This forces every ‘write’ to be appended to the current end of file.
The ‘lseek’ function only modifies the current offset in the file table entry. No I/O table
place.
If a file is positioned to its current end of file using lseek, all that happens is the current
file offset in the file table entry is set to the current file size from the i-node table entry.
It is possible for more than a descriptor entry to point to the same file table only. The file
descriptor flag is linked with a single descriptor in a single process, while file status flags are
descriptors in any process that point to given file table entry.
System calls are provided by UNIX to access and control files and devices.
Library Functions
To provide a higher level interface to device and disk files, UNIIX provides a number of
standard libraries.
142
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
Each running program, called a process, has associated with it a number of file descriptors.
When a program starts, it usually has three of these descriptors already opened. These are:
The write system call arranges for the first nbytes bytes from buf to be written to the file
associated with the file descriptor fildes.
143
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
$ simple_write
Here is some data
$
read
The read system call reads up to nbytes of data from the file associated with the file
decriptor fildes and places them in the data area buf.
This program, simple_read.c, copies the first 128 bytes of the standard input to the standard
output.
144
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
open
To create a new file descriptor we need to use the open system call.
The name of the file or device to be opened is passed as a parameter, path, and
the oflags parameter is used to specify actions to be taken on opening the file.
The oflags are specified as a bitwise OR of a mandatory file access mode and other optional
modes. The open call must specify one of the following file access modes:
The call may also include a combination (bitwise OR) of the following optional modes in
the oflags parameter:
145
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
Initial Permissions
When we create a file using the O_CREAT flag with open, we must use the three parameter
form. mode, the third parameter, is made form a bitwise OR of the flags defined in the header
file sys/stat.h. These are:
For example
Has the effect of creating a file called myfile, with read permission for the owner and execute
permission for others, and only those permissions.
umask
The umask is a system variable that encodes a mask for file permissions to be used when a file is
created.
You can change the variable by executing the umask command to supply a new value.
The value is a three-digit octal value. Each digit is the results of ANDing values from 1, 2, or 4.
146
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
For example, to block 'group' write and execute, and 'other' write, the umask would be:
Values for each digit are ANDed together; so digit 2 will have 2 & 1, giving 3. The
resulting umask is 032.
close
147
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
We use close to terminate the association between a file descriptor, fildes, and its file.
ioctl
ioctl is a bit of a rag-bag of things. It provides an interface for controlling the behavior of
devices, their descriptors and configuring underlying services.
ioctl performs the function indicated by cmd on the object referenced by the descriptor fildes.
We now know enough about the open, read and write system calls to write a low-level
program, copy_system.c, to copy one file to another, character by character.
148
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
We used the UNIX time facility to measure how long the program takes to run. It took 2 and one
half minutes to copy the 1Mb file.
We can improve by copying in larger blocks. Here is the improved copy_block.c program.
Now try the program, first removing the old output file:
149
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
Here are some system calls that operate on these low-level file descriptors.
lseek
The lseek system call sets the read/write pointer of a file descriptor, fildes. You use it to set
where in the file the next read or write will occur.
The offset parameter is used to specify the position and the whence parameter specifies how the
offset is used.
The dup system calls provide a way of duplicating a file descriptor, giving two or more, different
descriptors that access the same file.
150
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
The fstat system call returns status information about the file associated with an open file
descriptor.
The members of the structure, stat, may vary between UNIX systems, but will include:
The permissions flags are the same as for the open system call above. File-type flags include:
151
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
There are some macros defined to help with determining file types. These include:
To test that a file doesn't represent a directory and has execute permisson set for the owner and
no other permissions, we can use the test:
152
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
• Write lock is also called a exclusive lock and read lock is also called a shared lock.
• fcntl API can be used to impose read or write locks on either a segment or an entire file.
• Function prototype:
#include<fcntl.h>
• All file locks set by a process will be unlocked when the process terminates.
File Permission-chmod
You can change the permissions on a file or directory using the chmod system call. Tis forms the
basis of the chmod shell program.
chown
153
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
A superuser can change the owner of a file using the chown system call.
Soft link(symbolic links):Refer to a symbolic path indicating the abstract location of another
file.
Used to provide alternative means of referencing files.
Users may create links for files using ln command by specifying –s option.
hard links : Refer to the specific location of physical data.
A hard link is a UNIX path name for a file.
Most of the files have only one hard link. However users may create additional hard links for
files using ln command.
Limitations:
Users cannot create hard links for directories unless they have super user privileges.
Users cannot create hard links on a file system that references files on a different systems.
Directories
As well as its contents, a file has a name and 'administrative information', i.e. the file's
creation/modification date and its permissions.
154
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
The permissions are stored in the inode, which also contains the length of the file and where on
the disc it's stored.
A directory is a file that holds the inodes and names of other files.
mkdir, rmdir
We can create and remove directories using the mkdir and rmdir system calls.
The mkdir system call makes a new directory with path as its name.
chdir
A program can determine its current working directory by calling the getcwd library function.
The getcwd function writes the name of the current directory into the given buffer, buf.
155
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
Scanning Directories
The directory functions are declared in a header file, dirent.h. They use a structure, DIR, as a
basis for directory manipulation.
opendir
readdir
The readdir function returns a pointer to a structure detailing the next directory entry in the
directory stream dirp.
The dirent structure containing directory entry details included the following entries:
156
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
telldir
The telldir function returns a value that records the current position in a directory stream.
seekdir
The seekdir function sets the directory entry pointer in the directory stream given by dirp.
12.13.3 closedir
The closedir function closes a directory stream and frees up the resources associated with it.
1. The printdir, prints out the current directory. It will recurse for subdirectories.
157
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
158
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
How It Works
After some initial error checking, using opendir, to see that the directory exists, printdir makes
a call to chdir to the directory specified. While the entries returned by readdir aren't null, the
program checks to see whether the entry is a directory. If it isn't, it prints the file entry with
indentation depth.
159
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
160
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
UNIT-III
3.Process
Process concept
Layout of a C program
Image in main memory
Process environment
Environment list
Environment variables- getenv, setenv
Kernel support for process
Process identification
Process control
Process Creation
Replacing A Process Image
Waiting For A Process
Process Termination
Zombie Process,
Orphan Process
Exec Family
Process Groups
Sessions & Controlling Terminal
Differences Between Threads & Processes
161
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
kill, raise
alarm, pause
3.17.3abort
Unit 3
Processes and signals form a fundamental part of the UNIX operating environment, controlling
almost all activities performed by a UNIX computer system.
The X/Open Specification defines a process as an address space and single thread of control that
executes within that address space and its required system resources.
162
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
3. 2 Layout of a C program
Here is how a couple of processes might be arranged within the operationg system.
The program code that will be executed by the grep command is stored in a disk file.
The UNIX process table may be though of as a data structure describing all of the processes that
are currently loaded.
Viewing Processes
163
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
The PID column gives the PIDs, the TTY column shows which terminal started the process,
the STAT column shows the current status, TIME gives the CPU time used so far and
the COMMAND column shows the command used to start the process.
The initial login was performed on virtual console number one (v01). The shell is running bash.
Its status is s, which means sleeping. Thiis is because it's waiting for the X Windows sytem to
finish.
X Windows was started by the command startx. It won't finished until we exit from X. It too is
sleeping.
The fvwm is a window manager for X, allowing other programs to be started and windows to be
arranged on the screen.
This process represents a window in the X Windows system. The shell, bash, is running in the
new window. The window is running on a new pseudo terminal (/dev/ptyp0) abbreviated pp0.
164
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
This is the EMACS editor session started from the shell mentioned above. It uses the pseudo
terminal.
This is a clock program started by the window manager. It's in the middle of a one-minute wait
between updates of the clock hands.
Process environment
Let's look at some other processes running on this Linux system. The output has been
abbreviated for clarity:
In general, each process is started by another, known as its parent process. A process so started
is known as a child process.
When UNIX starts, it runs a single program, the prime ancestror and process number one: init.
One such example is the login procedure init starts the getty program once for each terminal that
we can use to long in.
165
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
When interacting with your server through a shell session, there are many pieces of information
that your shell compiles to determine its behavior and access to resources. Some of these settings
are contained within configuration settings and others are determined by user input.
One way that the shell keeps track of all of these settings and details is through an area it
maintains called the environment. The environment is an area that the shell builds every time that
it starts a session that contains variables that define system properties.
In this guide, we will discuss how to interact with the environment and read or set environmental
and shell variables interactively and through configuration files. We will be using an Ubuntu
12.04 VPS as an example, but these details should be relevant on any Linux system.
Every time a shell session spawns, a process takes place to gather and compile information that
should be available to the shell process and its child processes. It obtains the data for these
settings from a variety of different files and settings on the system.
Basically the environment provides a medium through which the shell process can get or set
settings and, in turn, pass these on to its child processes.
Environment List
The environment is implemented as strings that represent key-value pairs. If multiple values are
passed, they are typically separated by colon (:) characters. Each pair will generally will look
something like this:
KEY=value1:value2:...
The keys in these scenarios are variables. They can be one of two types, environmental variables
or shell variables.
166
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
Environmental variables are variables that are defined for the current shell and are inherited by
any child shells or processes. Environmental variables are used to pass information into
processes that are spawned from the shell.
Shell variables are variables that are contained exclusively within the shell in which they were
set or defined. They are often used to keep track of ephemeral data, like the current working
directory.
By convention, these types of variables are usually defined using all capital letters. This helps
users distinguish environmental variables within other contexts.
By default, a child process inherits the environment variables of its parent process. Programs
started by the command processor inherit the command processor's environment variables. To
specify a different environment for a child process, create a new environment block and pass a
pointer to it as a parameter to the CreateProcess function.
The command processor provides the set command to display its environment block or to create
new environment variables. You can also view or modify the environment variables by
selecting System from the Control Panel, selectingAdvanced system settings, and
clicking Environment Variables.
Each environment block contains the environment variables in the following format:
Var1=Value1\0
Var2=Value2\0
Var3=Value3\0
...
VarN=ValueN\0\0
The name of an environment variable cannot include an equal sign (=).
The GetEnvironmentStrings function returns a pointer to the environment block of the calling
process. This should be treated as a read-only block; do not modify it directly. Instead, use
the SetEnvironmentVariable function to change an environment variable. When you are finished
167
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
Process Identification:
Every process has a unique process ID, a non-negative integer. There are two special processes.
Process ID0 is usually the schedule process and is often known as the ‘swapper’. No program on
disk corresponds to this process – it is part of the kernel and is known as a system process,
process ID1 is usually the ‘init’ process and is invoked by the kernel at the end of the bootstrap
procedure. The program files for this process loss /etc/init in older version of UNIX and is
/sbin/init is newer version. ‘init’ usually reads the system dependent initialization files and brings
the system to a certain state. The ‘init’ process never dies. ‘init’ becomes the parent process of
any orphaned child process.
Process control
One further ps output example is the entry for the ps command itself:
168
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
This indicates that process 192 is in a run state (R) and is executing the command ps-ax.
We can set the process priority using nice and adjust it using renice, which reduce the priority of
a process by 10. High priority jobs have negative values.
Using the ps -l (forlong output), we can view the priority of processes. The value we are
interested in is shown in the NI (nice) column:
Here we can see that the oclock program is running with a default nice value. If it had been
stated with the command,
We can change the priority of a ruinning process by using the renice command,
So that now the clock program will be scheduled to run less often. We can see the modified nice
value with the ps again:
Notice that the status column now also contains N, to indicate that the nice value has changed
from the default.
Process Creation
169
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
We can cause a program to run from inside another program and thereby create a new process by
using the system. library function.
The system function runs the command passed to it as string and waits for it to complete.
2. When we compile and run this program, system.c, we get the following:
170
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
We could put the task in the background, by changing the function call to the following:
Now, when we compile and run this version of the program, we get:
How It Works
In the first example, the program calls system with the string "ps -ax", which executes
the ps program. Our program returns from the call to system when the ps command is finished.
In the second example, the call to system returns as soon as the shell command finishes. The
shell returns as soon as the ps program is started, just as would happen if we had typed,
at a shell prompt.
171
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
There is a whole family of related functions grouped under the exec heading. They differ in the
way that they start processes and present program arguments.
The exec family of functions replace the current process with another created according to the
arguments given.
If we wish to use an exec function to start the ps program as in our previous examples, we have
the following choices:
172
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
Now, when we run this program, pexec.c, we get the usual ps output, but no Done. message at
all.
Note also that there is no reference to a process called pexec in the output:
How It Works
The program prints its first message and then calls execlp, which searches the directories given
by the PATH environment variable for a program called ps.
It then executes this program in place of our pexec program, starting it as if we had given the
shell command:
We can arrange for the parent process to wait until the child finishes before continuing by
calling wait.
173
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
The wait system call causes a parent process to pause until one of its child processes dies or is
stopped.
We can interrogate the status information using macros defined in sys/wait.h. These include:
1. Let's modify our program slightly so we can wait for and examine the child process exit status.
Call the new program wait.c.
174
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
2. This section of the program waits for the child process to finish:
175
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
When we run this program, we see the parent wait for the child. The output isn't confused and
the exit code is reported as expected.
How It Works
The parent process uses the wait system call to suspend its own execution until status
information becomes available for a child process.
176
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
Zombie Processes
When a child process terminates, an association with its parent survives until the parent in turn
either terminates normally or calls wait.
fork2.c is jsut the same as fork.c, except that the number of messages printed by the child and
paent porcesses is reversed.
How It Works
If we run the above program with fork2 & and then call the ps program after the child has
finished but before the parent has finished, we'll see a line like this:
There's another system call that you can use to wail for child processes. It's called waitpid and
youu can use it to wait for a specific process to terminate.
177
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
If we want to have a parent process regularly check whether a specific child process had
terminated, we could use the call,
which will return zero if the child has not terminated or stopped or child_pid if it has.
Orphan Process
In addition to the process ID, there are other identifiers for every process. The following
functions return these identifiers
#incldue<sys/types.h>
#include<unistd.h>
fork Function
178
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
The only way a new process is created by the UNIX kernel is when an existing process calls the
fork function.
#include<sys/types.h>
#include<unistd.h>
pid_t fork(void);
The new process created by fork is called child process. This is called once, but return twice that
is the return value in the child is 0, while the return value in the parent is the process ID of the
new child. The reason the child’s process ID is returned to the parent is because a process can
have more than one child, so there is no function that allows a process to obtain the process IDs
of its children. The reason fork return 0 to the child is because a process can have only a single
parent, so that child can always call getppid to obtain the process ID of its parent.
Both the child and parent contain executing with the instruction that follows the call to fork. The
child is copy of the parent. For example, the child gets a copy of the parent’s data space, heap
and stack. This is a copy for the child the parent and children don’t share these portions of
memory. Often the parent and child share the text segment, if it is read-only.
1. When a process wants to duplicate itself so that the parent and child can each execute
different sections of code at the same time. This is common for network servers_ the
parent waits for a service requests from a client. When the request arrives, the parent
calls fork and lets the child handle the request. The parent goes back to waiting for the
next service request to arrive.
When a process wants to execute a different program, this is common for shells. In this
case the child does an exec right after it returns from the fork.
vfork Function
179
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
The function vfork has the same calling sequence and share return values as fork. But the
semantics of the two functions differ. vfork is intended to create a new process when the
purpose of the new process is to exec a new program. vfork creates the new process, just like
fork, without fully copying the address space of the parent into the child, since the child won’t
reference the address space – the child just calls exec right after the vfork. Instead, while the
child is running, until it calls either exec or exit, the child runs in the address space of the parent.
This optimization provides an efficiency gain on some paged virtual memory implementations of
UNIX.
Another difference between the two functions is that vfork guarantees that the child runs first,
until the parent resumes.
exit Function
There are three ways for a process to terminate normally, and two forms of abnormal
termination.
1. Normal termination:
a. Executing a return from the main function. This is equivalent to calling exit
b. Calling the exit function
c. Calling the _exit function
2. Abnormal termination
a. Calling abort: It generates the SIGABRT signal
b. When the process receives certain signals. The signal can be generated by the
process itself
Regardless of how a process terminates, the same code in the kernel is eventually executed. This
kernel code closes all the open descriptors for the process, releases the memory that it was using,
and the like.
For any of the preceding cases we want the terminating process to be able to notify its parent
how it terminated. For the exit and _exit functions this is done by passing an exit status as the
argument to these two functions. In the case of an abnormal termination however, the kernel
generates a termination status to indicate the reason for the abnormal termination. In any case,
the parent of the process can obtain the termination status from either the wait or waitpid
180
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
function.The exit status is converted into a termination status by the kernel when _exit is finally
called. If the child terminated normally, then the parent can obtain the exit status of the child.
If the parent terminates before the child, then init process becomes the parent process of any
process, whose parent terminates; that is the process has been inherited by init. Whenever a
process terminates the kernel goes through all active processes to see if the terminating process is
the parent of any process that still exists. If so, the parent process ID of the still existing process
is changed to be 1 to assume that every process has a parent process.
When a child terminates before the parent, and if the child completely disappeared, the parent
wouldn’t be able to fetch its termination status, when the parent is ready to seek if the child had
terminated. But parent get this information by calling wait and waitpid, which is maintained by
the kernel.
When a process terminates, either normally or abnormally, the parent is notified by the kernel
sending the parent SIGCHLD signal. Since the termination of a child is an asynchronous event,
this signal is the asynchronous notification from the kernel to the parent. The default action for
this signal is to be ignored. A parent may want for one of its children to terminate and then
accept it child’s termination code by executing wait.
If the process is calling wait because it received SIGCHLD signal, we expect wait to return
immediately. But, if we call it at any random point in time, it can block.
#include<sys/types.h>
#include<sys/wait.h>
181
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
1. wait can block the caller until a child process terminates, while waitpid has an option that
prevents it from blocking.
2. waitpid does not wait for the first child to terminate, it has a number of options that
control which process it waits for.
If a child has already terminated and is a zombie, wait returns immediately with that child’s
status. Otherwise, it blocks the caller until a child terminates: if the caller blocks and has
multiple children, wait returns when one terminates, we can know this process by PID return by
the function.
For both functions, the argument statloc is pointer to an integer. If this argument is not a null
pointer, the termination status of the terminated process is stored in the location pointed to by the
argument.
If we have more than one child, wait returns on termination of any of the children. A function
that waits for a specific process is waitpid function.
The interpretation of the pid argument for waitpid depends on its value:
pid == -1 waits for any child process. Here, waitpid is equivalent to wait
pid > 0 waits for the child whose process ID equals pid
pid == 0 waits for any child whose process group ID equals that of the calling
process
pid < -1 waits for any child whose process group ID equals the absolute value of
pid
waitpid returns the process ID of the child that terminated, and its termination status is returned
through statloc. With wait the only error is if the calling process has no children. With waitpid
182
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
however, it’s also possible to get an error if the specified process or process group does not exist
or is not a child of the calling process.
The options argument lets us further control the operation of waitpid. This argument is either 0
or is constructed from the bitwise OR of the following constants.
WNOHANG waitpid will not blink if a child specified by pid is not immediately
available. In this case, the return value is 0.
WUNTRACED if the status of any child specified by pid that has stopped, and whose
status has not been updated since it has stopped, is returned
The waitpid function provides these features that are not provided by the wait function are:
The fork function can create a new process that then causes another program to be executed by
calling one of the exec functions. When a process calls one of the exec functions, that process is
completely replaced by the new program and the new program starts executing at its main
function. The process ID doesn’t change across an exec because a new process is not created.
exec merely replaces the current process with a brand new program from disk.
There are six different exec functions. These six functions round out the UNIX control
primitives. With fork we can create new processes, and with the exec functions we can initiate
new programs. The exit function and the two wait functions handle termination and waiting for
termination. These are the only process control primitives we need.
#include<unistd.h>
int execle(const char *pathname, const char *arg0, . . . /* (char *) 0, char envp[]*/);
183
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
int execve(const char *pathname, char *const argv[], char *const envp[]);
The first difference in these functions is that the first four take a pathname argument, while the
last two take a filename argument. When a filename argument is specified:
PATH=/bin:/usr/bin:usr/local/bin/:.
Specifies four directories to search, where last one is current working directory.
If either of the two functions, execlp or execvp finds an executable file using one of the path
prefixes, but the file is not a machine executable that was generated by the link editor, it assumes
the file is a shell script and tries to invoke /bin/sh with filename as input to the shell.
The next difference concerns the passing of argument list. The function execl, execlp and execle
require each of the command-line arguments to the new program to be specified as separate
arguments. The end of the argument should be a null pointer. For the other three functions
execv, execvp and execve, we have to build an array of pointers to the arguments, and the
address of this array is the argument to these three functions.
The final difference is the passing of the environment list to the new program. The two functions
execle and execve allow us to pass a pointer to an array of pointer to an array of pointer to an
array of pointers to the environment strings. The other four functions, however, use the environ
variable in the calling process to copy the existing environment for the new program.
184
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
UNIX processes can cooperate; they can send each other messages and they can interrupt one
another.
There is a class of process known as a thread which are distinct from processes in that they are
separate execution streams within a single process.
Signals
A signal is an event generated by the UNIX system in response to some condition, upon receipt
of which a process may in turn take some action.
Signal names are defined in the header file signal.h. They all begin with SIG and include:
185
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
If the shell and terminal driver are configured normally, typing the interrupt character (Ctrl-C) at
the keyboard will result in the SIGINT signal being sent to the foreground process. This will
cause the program to terminate.
The signal function itself returns a function of the same type, which is the previous value of the
function set up to handle this signal, or one of these tow special values:
1. We'll start by writing the function which reacts to the signal which is passed in the
parameter sig. Let's call it ouch:
186
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
2. The main function has to intercept the SIGINT signal generated when we type Ctrl-C.
For the rest of the time, it just sits in an infinite loop, printing a message once a second:
3. While the program is running, typing Ctrl-C causes it to react and then continue.
187
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
How It Works
The program arranges for the function ouch to be called when we type Ctrl-C, which gives
the SIGINT signal.
A process may send a signal to another process, including itself, by calling kill.
The alarm function call can be used by a process to schedule a SIGALRM signal at some time
in the future.
188
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
2. In main, we tell the child process to wait for five seconds before sending a SIGALRM signal
to its parent:
3. The parent process arranges to catch SIGALRM with a call to signal and then waits for the
inevitable.
189
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
When we run this program, it pauses for five seconds while it waits for the simulated alarm
clock.
This program introduces a new function, pause, which simply causes the program to suspend
execution until a signal occurs.
How It Works
The alarm clock simulation program starts a new process via fork. This child process sleeps for
five seconds and then sends a SIGALRM to its parent.
X/Open specification recommends a newer programming interface for signals that is more
robust: sigaction.
190
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
The sigaction structure, used to define the actions to be taken on receipt of the signal specified
by sig, is defined in signal.h and has at least the following members:
Make the changes shown below so that SIGINT is intercepted by sigaction. Call the new
program ctrlc2.c.
191
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
Running the program, we get a message when we type Ctrl-C because SIGINT is handled
repeated;y by sigaction.
192
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
How It Works
The program calls sigaction instead of signal to set the signal handler for Ctrl-C (SIGINT) to
the function ouch.
Signal Sets
The header file signal.h defines the type sigset_t and functions used to manipulate sets of
signals.
The function sigismember determines whether the given signal is amember of a signal set.
193
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
The process signal mask is set or examined by calling the function sigprocmask.
sigprocmask can change the process signal mask in a number of ways according to
the how argument.
A program can determine which of its blocked signals ar pending by calling the
function sigpending.
A process can suspend execution until the delivery of one of a set of signals by
calling sigsuspend.
194
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
Signal Functions
The system calls related to signals are explained in the following sections.
Unreliable signals
The signals could get lost – a signal could occur and the process would never know about it.
Here, the process has little control over a signal, it could catch the signal or ignore it, but
blocking of a signal is not possible.
Reliable signals
Linux supports both POSIX reliable signals (hereinafter "standard signals") and POSIX real-time
signals.
Signal dispositions
Each signal has a current disposition, which determines how the process behaves when it is
delivered the signal.
The entries in the "Action" column of the tables below specify the default disposition for each
signal.
The kill function sends a signal to a process or a group of processes. The raise function allows a
process to send a signal to itself.
#include<sys/types.h>
#include<signal.h>
195
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
There are four different conditions for the pid argument to kill:
pid > 0 The signal is sent to the process whose process ID is pid.
pid = 0 The signal is sent to all processes whose process group ID equals the process
group ID of the sender and for which the sender has permission to send the signal.
pid<0 The signal is sent to all processes whose process group ID equals the absolute
value of pid and for which the sender has permission to send the signal.
pid = -1 unspecified.
The alarm function allows us to get a timer that will expire at a specified time in the future.
When the timer expires, the SIGALRM signal is generated. If we ignore or don’t catch this
signal, its default action is to terminate the process.
#include<unistd.h>
The seconds value is the number of clock seconds in the future when the signal should be
generated. There is only one of the alarm clocks per process. If, when we call alarm, there is a
previously registered alarm clock for the process that has not yet expired, the number of seconds
left for that alarm clock to return as the value of this function. That previously registered alarm
clock is replaced by the new value.
If there is a previously registered alarm clock for the process that has not yet expired and if the
seconds value is 0, the previous alarm clock is cancelled. The number of seconds left for that
previous alarm clock is still returned as the value of the function.
Although the default action for SIGALRM is terminating the process, most processes use an
alarm clock catch this signal.
196
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
The pause function suspends the calling process until a signal is caught.
#include<unistd.h>
int pause(void);
The only time pause returns is if a signal handler is executed and that handler returns. In that
case, pause returns -1 with errno set to EINTR.
abort Function
#include<stdlib.h>
void abort(void);
This function sends the SIGABRT signal to the process. A process should not ignore this signal.
abort overrides the blocking or ignoring of the signal by the process.
sleep Function
#include<unistd.h>
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
UNIT-IV:
IV.Interprocess Communication
Introduction to IPC
IPC between processes on a single computer system
IPC between processes on different systems
Pipes- creation
IPC between related processes using unnamed pipes
FIFOs- creation, IPC between unrelated processes using FIFOs(named pipes)
Differences Between Unnamed And Named Pipes
popen & pclose library functions.
198
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
Unit IV
Introduction to IPC
Interprocess communication (IPC) includes thread synchorization and data exchange between
threads beyond the process boundaries. If threads belong to the same process, they execute in the
same address space, i.e. they can access global (static) data or heap directly, without the help of
the operating system. However, if threads belong to different processes, they cannot access each
others address spaces without the help of the operating system.
The first case is easier to implement because processes can share memory either in the user space
or in the system space. This is equally true for uniprocessors and multiprocessors.
In the second case the computers do not share physical memory, they are connected via I/O
device(for example serial communication or Ethernet). Therefore the processes residing in
different computers can not use memory as a means for communication.
Most of this chapter is focused on IPC on a single computer system, including four general
approaches:
Shared memory
Messages
Pipes
Sockets
199
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
The synchronization objects considered in the previous chapter normally work across the process
boundaries (on a single computer system). There is one addition necessary however: the
synchronization objects must be named. The handles are generally private to the process, while
the object names, like file names, are global and known to all processes.
h = init_CS("xxx");
h = init_semaphore(20,"xxx");
h = init_event("xxx");
h = init_condition("xxx");
h = init_message_buffer(100,"xxx");
IPC between processes on different systems
IPC is Inter Process Communication, more of a technique to share data across different processes
within one machine, in such a way that data passing binds the coupling of different processes.
The first, is using memory mapping techniques, where a memory map is created, and others
open the memory map for reading/writing...
The second is, using sockets, to communicate with one another...this has a high overhead, as
each process would have to open up the socket, communicate across... although effective
The third, is to use a pipe or a named pipe, a very good example
PIPES:
A pipe is a serial communication device (i.e., the data is read in the order in which it was
written),which allows a unidirectional communication. The data written to end
isreadbackfromtheotherend.
The pipe is mainly used to communicate between two threads in a single process or between
parent and child process. Pipes can only connect the related process. In shell,
thesymbolcanbeusedtocreateapipe.
In pipes the capacity of data is limited. (i.e.) If the writing process is faster than the reading
process which consumes the data, the pipe cannot store the data. In this situation the writer
process will block until more capacity becomes available. Also if the reading process tries to
read data when there is no data to read, it will be blocked until the data becomes available. By
this, pipes automatically synchronize the two process.
Creatingpipes:
The pipe() function provides a means of passing data between two programs and also allows to
read and write the data.
#include<unistd.h>
int pipe(int file_descriptor[2]);
pipe()function is passed with an array of file descriptors. It will fill the array with new file
descriptors and returns zero. On error, returns -1 and sets the errno to indicate the reason of
200
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
failure.
The file descriptors are connected in a way that is data written to file_ descriptor[1] can be read
back from the file_descriptor[0].
(Note: As this uses file descriptors and not the file streams, we must use read and write system
calls to access the data.)
Pipes are originally used in UNIX and are made even more powerful in Windows 95/NT/2000.
Pipes are implemented in file system. Pipes are basically files with only two file offsets: one for
reading another for writing. Writing to a pipe and reading from a pipe is strictly in FIFO manner.
(Therefore pipes are also called FIFOs).
For efficiency, pipes are in-core files, i.e. they reside in memory instead on disk, as any other
global data structure. Therefore pipes must be restricted in size, i.e. number of pipe blocks must
be limited. (In UNIX the limitation is that pipes use only direct blocks.)Since the pipes have a
limited size and the FIFO access discipline, the reading and writing processes are synchronized
in a similar manner as in case of message buffers. The access functions for pipes are the same as
for files: WriteFile() and ReadFile().
We can invoke the standard programs, ones that don’t expect a file descriptor as a parameter.
#include<unistd.h>
int dup(int file_descriptor);
int dup2(int file_descriptor_1,
int file_descriptor_2);
The purpose of dup call is to open a new file descriptor, which will refer to the same file as an
existing file descriptor. In case of dup, the value of the new file descriptor is the lowest number
available. In dup2 it is same as, or the first available descriptor greater than the parameter
file_descriptor_2.
We can pass data between process by first closing the file descriptor 0 and call is made to dup.
By this the new file descriptor will have the number 0.As the new descriptor is the duplicate of
an existing one, standard input is changed to have the access. So we have created two file
descriptors for same file or pipe, one of them will be the standard input.
(Note: The same operation can be performed by using the fcntl() function. But compared to this
dup and dup2 are more efficient)
//pipes.c
#include<unistd.h>
#include<stdlib.h>
#include<stdio.h>
201
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
#include<string.h>
int main()
{
int data_processed;
int file_pipes[2];
const char some_data[]= "123";
pid_t fork_result;
if(pipe(file_pipes)==0)
{
fork_result=fork();
if(fork_result==(pid_t)-1)
{
fprintf(stderr,"fork failure");
exit(EXIT_FAILURE);
}
202
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
if(fork_result==(pid_t)0)
{
close(0);
dup(file_pipes[0]);
close(file_pipes[0]);
close(file_pipes[1]);
execlp("od","od","-c",(char *)0);
exit(EXIT_FAILURE);
}
else
{
close(file_pipes[0]);
data_processed=write(file_pipes[1],
some_data,strlen(some_data)); close(file_pipes[1]);
printf("%d -wrote %d bytes\n",(int)getpid(),data_processed);
}
} exit(EXIT_SUCCESS);
}
The program creates a pipe and then forks. Now both parent and child process will have its own
file descriptors for reading and writing. Therefore totally there are four file descriptors.
The child process will close its standard input with close(0) and calls duo(file_pipes[0]). This
will duplicate the file descriptor associated with the read end. Then child closes its original file
descriptor. As child will never write, it also closes the write file descriptor,
file_pipes[1]. Now there is only one file descriptor 0 associated with the pipe that is standard
input. Next, child uses the exec to invoke any program that reads standard input.
The od command will wait for the data to be available from the user terminal.
Since the parent never read the pipe, it starts by closing the read end that is file_pipe[0]. When
writing process of data has been finished, the write end of the parent is closed and exited. As there
are no file descriptor open to write to pipe, the od command will be able to read the three bytes
written to pipe, meanwhile the reading process will return 0 bytes indicating the end of the file.
Namedpipes.
Unnamed pipes (Anonymous pipes)
FIFO creation:
203
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
Once a FIFO special file has been created, any process can open it for
reading or writing, in the same way as an ordinary file.
A First-in, first-out(FIFO) file is a pipe that has a name in the filesystem. It is also called as
named pipes.
Creation of FIFO:
We can create a FIFO from the command line and within a program.
To create from command line we can use either mknod or mkfifo commands.
$ mknod filename p
$ mkfifo filename
(Note: The mknod command is available only n older versions, you can make use of mkfifo in
new versions.)
To create FIFO within the program we can use two system calls. They are,
#include<sys/types.h>
#include<sys/stat.h>
If we want to use the mknod function we have to use ORing process of fileaccess mode with
S_IFIFO and the dev_t value of 0.Instead of using this we can use the simple mkfifo function.
Accessing FIFO:
Let us first discuss how to access FIFO in command line using file commmands. The useful
feature of named pipes is, as they appear in the file system, we can use them in commands.
204
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
FIFO can also be accessed as like a file in the program using low-level I/O functions or C library
I/O functions.
The only difference between opening a regular file and FIFO is the use of open_flag with the
optionO_NONBLOCK. The only restriction is that we can’t open FIFO for reading and writing
with O_RDWR mode.
//fifo1.c
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <limits.h>
#include <sys/types.h>
#include <sys/stat.h>
int main()
{
int pipe_fd;
int res;
int open_mode = O_WRONLY;
int bytes_sent = 0;
char buffer[BUFFER_SIZE + 1];
if (access(FIFO_NAME, F_OK) == -1) {
res = mkfifo(FIFO_NAME, 0777);
if (res != 0) {
fprintf(stderr, "Could not create fifo %s\n", FIFO_NAME);
exit(EXIT_FAILURE);
}
}
printf("Process %d opening FIFO O_WRONLY\n", getpid());
pipe_fd = open(FIFO_NAME, open_mode);
printf("Process %d result %d\n", getpid(), pipe_fd); if
(pipe_fd != -1) {
while(bytes_sent < TEN_MEG) {
res = write(pipe_fd, buffer, BUFFER_SIZE); if
(res == -1) {
fprintf(stderr, "Write error on pipe\n");
exit(EXIT_FAILURE);
}
205
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
}
(void)close(pipe_fd);
}
else { exit(EXIT_FAILURE);
}
printf("Process %d finished\n", getpid());
exit(EXIT_SUCCESS);
}
//fifo2.c
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <limits.h>
#include <sys/types.h>
#include <sys/stat.h>
#define FIFO_NAME "/tmp/my_fifo"
#define BUFFER_SIZE PIPE_BUF int
main()
{
int pipe_fd; int
res;
int open_mode = O_RDONLY; char
buffer[BUFFER_SIZE + 1]; int
bytes_read = 0;
memset(buffer, '\0', sizeof(buffer));
printf("Process %d opening FIFO O_RDONLY\n", getpid());
pipe_fd = open(FIFO_NAME, open_mode);
printf("Process %d result %d\n", getpid(), pipe_fd);
if (pipe_fd != -1) {
do {
res = read(pipe_fd, buffer, BUFFER_SIZE);
bytes_read += res;
} while (res > 0);
(void)close(pipe_fd);
}
else {
exit(EXIT_FAILURE);
}
printf("Process %d finished, %d bytes read\n", getpid(), bytes_read);
exit(EXIT_SUCCESS);
}
Both fifo1.c and fifo2.c programs use the FIFO in blocking mode.
206
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
First fifo1.c is executed .It blocks and waits for reader to open the named pipe. Now writer
unblocks and starts writing data to pipe. At the same time, the reader starts reading data from the
pipe.
Anonymous pipes don't have names, therefore they can be used only between related processes
which can inherit the file handles (file descriptors).
Anonymous pipes are typically used to "pipe" two programs: standard output from one program
is redirected to the pipe input (write handle), while the standard input of the second program is
redirected to from the pipe output (read handle). The pipe is created by the parent (usually the
login shell), and the pipe handles are passed to children through the inheritance mechanism.
Anonymous pipes cannot be used across a network. Also, anonymous pipes are unidirectional- in
order to communicate two related processes in both directions, two anonymous pipes must be
created.
//*******************************************************************
// This program implements piping of programs p1.exe and p2.exe
// through an anonymous pipe. The program creates two child processes
// (which execute images p1.exe and p2.exe) and a pipe, then passes
// the pipe handles to the children.
//
// The program is invoked as: pipe p1 p2 (no command line arguments)
//*******************************************************************
#include <windows.h>
#include <iostream.h>
int main(int argc, char *argv[])
{
// Create anonymous (unnamed) pipe
SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = 0;
sa.bInheritHandle = TRUE; // Handles are inheritable (default is FALSE)
HANDLE rh,wh; // Read and write handles of the pipe
if(!CreatePipe(&rh,&wh,&sa,0))
{
cout << "Couldn't create pipe " << GetLastError()<< endl;
return (1);
}
// Create the first child process p1
PROCESS_INFORMATION pi1;
STARTUPINFO si1;
GetStartupInfo(&si1); // Get default startup structure
207
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
si1.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
si1.hStdOutput = wh; // Std output of p1 is input to the pipe
si1.dwFlags = STARTF_USESTDHANDLES;
CreateProcess( argv[1], // Name of the p1's image (without ".exe."
0,0,0,
TRUE, // Each open inheritable handle of the
// parent will be inherited by the child
0,0,0,
&si1,&pi1);
CloseHandle(wh); // Pipe handle no longer needed
// Create the second child process p2
PROCESS_INFORMATION pi2;
STARTUPINFO si2;
GetStartupInfo(&si2); // Get default startup structure
si2.hStdInput = rh; // Std input of p2 is otput from the pipe
si2.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
si2.dwFlags = STARTF_USESTDHANDLES;
CreateProcess( 0,argv[2], // Name of the p1's image (without ".exe."
0,0,
TRUE, // Each open inheritable handle of the
// parent will be inherited by the child
0,0,0,
&si2,&pi2);
WaitForSingleObject(pi1.hProcess,INFINITE);
CloseHandle(pi1.hProcess);
WaitForSingleObject(pi2.hProcess,INFINITE);
CloseHandle(pi2.hProcess);
CloseHandle(rh);
return(0);
}
Comment:
In order to communicate two processes (P1 and P2) through anonymous pipes by redirecting the
standard I/O, the processes don't have to be aware of the existence of pipes, i.e. their sources and
images don't have to be modified.
The process of passing data between two programs can be done with the help of popen() and
pclose() functions.
#include<stdio.h>
FILE *popen(const char *command ,
const char *open-mode);
int pclose(FILE *stream_to_close);
208
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
popen():
The popen function allows a program to invoke another program as a new process and either
write the data to it or to read from it. The parameter command is the name of the program to run.
The open_mode parameter specifies in which mode it is to be invoked, it can be only either "r" or
"w". On failure popen() returns a NULL pointer. If you want to perform bi-directional
communication you have to use two pipes.
pclose():
By using pclose(), we can close the filestream associated with popen() after the process started
by it has been finished. The pclose() will return the exit code of the process, which is to be
closed. If the process was already executed a wait statement before calling pclose, the exit status
will be lost because the process has been finished. After closing the filestream, pclose() will wait
for the child process to terminate.
Messagequeue:
This is an easy way of passing message between two process. It provides a way of
sending a block of data from one process to another. The main advantage of using this is, each
block of data is considered to have a type, and a receiving process receives the blocks of data
having different type values independently.
The first parameter is the key value, which specifies the particular message queue. The special
constant IPC_PRIVATE will create a private queue. But on some Linux systems the message
queue may not actually be private.
The second parameter is the flag value, which takes nine permission flags.
Adding a message:
The msgsnd() function allows to add a message to a message queue.
#include<sys/msg.h>
int msgsnd(int msqid,const void *msg_ptr ,size_t msg_sz,int msgflg);
The first parameter is the message queue identifier returned from an msgget function.
The second parameter is the pointer to the message to be sent. The third parameter is the size of
the message pointed to by msg_ptr. The fourth parameter, is the flag value controls what happens
if either the current message queue is full or within the limit. On success, the function returns 0
and a copy of the message data has been taken and placed on the message queue, on failure -1 is
returned.
Retrieving a message:
The smirch() function retrieves message from the message queue.
209
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
#include<sys/msg.h>
int msgsnd(int msqid,const void *msg_ptr
,size_t msg_sz,long int msgtype ,int msgflg);
The fourth parameter allows a simple form of reception priority. If its value is 0,the first
available message in the queue is retreived. If it is greater than 0,the first message type is
retrived. If it is less than 0,the first message that has a type the same a or less than the absolute
value of msgtype is retrieved.
On success, msgrcv returns the number on bytes placed in the receive buffer, the message is
copied into the user-allocated buffer and the data is deleted from the message queue. It returns -1
on error.
#include<sys/msg.h>
int msgctl(int msgid,int command,
struct msqid_ds *buf);
1.) IPC_STAT - Sets the data in the msqid_ds to reflect the values associated with the message
210
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
queue.
2.) IPC_SET - If the process has the permission to do so, this sets the values associated with the
message queue to those provided in the msgid_ds data structure.
(Note: If the message queue is deleted while the process is writing in a msgsnd or msgrcv
function, the send or receive function will fail.
//msgq1.c
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<errno.h>
#include<unistd.h>
#include<sys/msg.h>
struct my_msg_st
{
long int my_msg_type;
char some_text[BUFSIZ];
};
int main()
{
int running = 1;
int msgid;
struct my_msg_st some_data;
long int msg_to_receive = 0;
211
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
while (running)
{
if(msgrcv(msgid, (void *)&some_data,
BUFSIZ,msg_to_receive,0) == -1)
{
fprintf(stderr, "failedto receive: \n");
exit(EXIT_FAILURE);
}
}
}
if (msgctl(msgid, IPC_RMID, 0) == -1)
{
fprintf(stderr, "failed to delete\n");
exit(EXIT_FAILURE);
}
exit(EXIT_SUCCESS);
}
//msgq2.c
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/msg.h>
#define MAX_TEXT 512
struct my_msg_st
{
long int my_msg_type;
char some_text[MAX_TEXT];
};
int main()
{
int running = 1;
212
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
The msgq1.c program will create the message queue using msgget() function.
The msgid identifier is returned by the msgget().The message are received from the queue
using msgrcv() function until the string "end" is encountered. Then the queue is
deletedusing msgctl() function.
The msgq2.c program uses the msgsnd() function to send the entered text to the queue.
Semaphore:
While we are using threads in our programs in multi-user systems, multiprocessing system, or a
combination of two, we may often discover critical sections in the code. This is the section where
we have to ensure that a single process has exclusive access totheresource.
For this purpose the semaphore is used. It allows in managing the access to resource.
To prevent the problem of one program accessing the shared resource simultaneously, we are in
213
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
need to generate and use a token which guarantees the access to only one
threadofexecutioninthecriticalsectionatatime.
It is counter variable, which takes only the positive numbers and upon which programs can only
act atomically. The positive number is the value indicating the number of units of the shared
resources are available for sharing.
The common form of semaphore is the binary semaphore, which will control a single resource,
and its value is initialized to 0.
Creation of semaphore:
The shmget() function creates a new semaphore or obtains the semaphore key of an existing
semaphore.
#include<sys/sem.h>
intshmget(key_tkey,intnum_sems,
intsem_flags);
The first parameter, key, is an integral value used to allow unrelated process to access the same
semaphore. The semaphore key is used only by semget. All others use the identifier return by the
semget(). There is a special key value IPC_PRIVATE whichallows to create the semaphore and
to be accessed only by the creating process.
On success it will return a positive value which is the identifier used by the other semaphore
functions. On error, it returns -1.
#include<sys/sem.h>
int semop(int sem_id,struct sembuf
*sem_ops,size_t num-_sem_ops);
The first parameter is the shmid is the identifier returned by the semget().
The second parameter is the pointer to an array of structure. The structure may contain at least
the following members:
struct sembuf{
short sem_num;
short sem_op;
short sem_flg;
}
214
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
The first member is the semaphore number, usually 0 unless it is an array of semaphore. The
sem_op is the value by which the semaphore should be changed. Generally it takes -1,which is
operation to wait for a semaphore and +1, which is the operation to signal the availability of
semaphore.
The third parameter, is the flag which is usually set to SET_UNDO. If the process terminates
without releasing the semaphore, this allows to release it automatically.
#include<sys/sem.h>
int semctl(int sem_id,int sem_num,
int command,.../*union semun arg */);
The third parameter is the command, which defines the action to be taken. There are two
common values:
//sem.c
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/sem.h>
#include<sys/ipc.h>
#include<sys/types.h>
union semun
{
int val;
struct semid_ds *buf;
unsigned short *array;
};
215
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
//-------------------------------------------
//--------------------------------------------
static int semaphore_p()
{
struct sembuf sem_b;
sem_b.sem_num = 0;
sem_b.sem_op = -1; /* P() */
sem_b.sem_flg = SEM_UNDO;
if (semop(sem_id, &sem_b, 1) == -1)
{
fprintf(stderr, "semaphore_p failed\n");
return(0);
}
return(1);
}
//------------------------------------------------
static int semaphore_v()
{
struct sembuf sem_b;
sem_b.sem_num = 0;
sem_b.sem_op = 1; /* V() */
sem_b.sem_flg = SEM_UNDO;
if (semop(sem_id, &sem_b, 1) == -1) {
fprintf(stderr, "semaphore_v failed\n");
return(0);
}
216
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
return(1);
}
if (!semaphore_v()) exit(EXIT_FAILURE);
pause_time = rand() % 2;
sleep(pause_time);
}
printf("\n%d - finished\n", getpid());
if (argc > 1)
{
sleep(10);
del_semvalue();
}
exit(EXIT_SUCCESS);
}
217
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
The function set_semvalue() initializes the semaphore using the SETVAL command
in semctl()function. But this is to be done before the usage of semaphore.
In the function semaphore_v(),the semop member of the structure sembuf is set to 1.By this the
semphore becomes available for the other processes because it is released.
218
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
UNIT -V:
Shared Memory
Kernel support for shared memory
APIs for shared memory,
Sockets
Introduction to Berkeley Sockets
IPC over a network
Client/server model
Socket Address structures (UNIX domain & internet domain)
Socket system calls for connection oriented protocol and connectionless protocol
219
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
UNIT V
Shared Memory and Sockets
Shared Memory:
Shared memory is a highly efficient way of data sharing between the running programs. It allows
two unrelated processes to access the same logical memory. It is the fastest form of IPC because
all processes share the same piece of memory. It also avoidscopyingdataunnecessarily.
As kernel does not synchronize the processes, it should be handled by the user. Semaphore can
also be used to synchronize the access to shared memory.
Usageofsharedmemory:
To use the shared memory, first of all one process should allocate the segment, and then each
process desiring to access the segment should attach the segment. After accessing the segment,
each process should detach it. It is also necessary to deallocate thesegmentwithoutfail.
Allocating the shared memory causes virtual pages to be created. It is important to note that
allocating the existing segment would not create new pages, but will return
theidentifierfortheexistingpages.
All the shared memory segments are allocated as the integral multiples of the system's page size,
which is the number of bytes in a page of memory.
There is a shared memory table in the kernel address space that keeps track of all shared
memory regions created in the system.
Each entry of the tables store the following data:
1. Name
2. Creator user ID and group ID.
3. Assigned owner user ID and group ID.
4. Read-write access permission of the region.
5. The time when the last process attached to the region.
6. The time when the last process detached from the region.
7. The time when the last process changed control data of the region.
8. The size, in no. of bytes of the region.
shmget
220
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
Function prototype:
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/shm.h>
Shmat
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/shm.h>
Shmdt
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/shm.h>
Shmctl
221
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
Function prototype:
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/shm.h>
//shmry1.c
#include<unistd.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<sys/shm.h>
struct shared_use_st
{
int written_by_you;
char some_text[TEXT_SZ];
};
int main()
{
int running = 1;
void *shared_memory = (void *)0;
struct shared_use_st *shared_stuff;
int shmid;
srand( (unsigned int)getpid() );
shmid = shmget( (key_t)1234,
sizeof(struct shared_use_st),
0666 |IPC_CREAT );
if (shmid == -1)
{
fprintf(stderr, "shmget failed\n");
222
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
exit(EXIT_FAILURE);
}
shared_memory = shmat(shmid,(void *)0, 0);
if (shared_memory == (void *)-1)
{
fprintf(stderr, "shmat failed\n");
exit(EXIT_FAILURE);
}
{
if(shared_stuff->written_by_you)
{
sleep( rand() %4 );
shared_stuff->written_by_you = 0;
if (strncmp(shared_stuff->some_text,
"end", 3)== 0)
{
running = 0;
}
}
}
if (shmdt(shared_memory) == -1)
{
fprintf(stderr, "shmdt failed\n");
exit(EXIT_FAILURE);
}
if (shmctl(shmid, IPC_RMID, 0) == -1)
{
fprintf(stderr, "failed to delete\n");
223
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
exit(EXIT_FAILURE);
}
exit(EXIT_SUCCESS);
//shmry2.c
#include<unistd.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<sys/shm.h>
int main()
{
int running =1
void *shared_memory = (void *)0;
struct shared_use_st *shared_stuff;
char buffer[BUFSIZ];
int shmid;
shared_memory=shmat(shmid,
(void *)0, 0);
if (shared_memory == (void *)-1)
{
fprintf(stderr, "shmat failed\n");
exit(EXIT_FAILURE);
224
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
The shmry1.c program will create the segment using shmget() function and returns the identifier
shmid. Then that segment is attached to its address space using shmat() function.
The structure share_use_st consists of a flag written_by_you is set to 1 when data is available.
When it is set, program reads the text, prints it and clears it to show it has read the data. The
string end is used to quit from the loop. After this the segment is detached and deleted.
The shmry2.c program gets and attaches to the same memory segment. This is possible with the
help of same key value 1234 used in the shmget() function. If the written_by_you text is set, the
process will wait until the previous process reads it. When the flag is cleared, the data is written
and sets the flag. This program too will use the string "end" to terminate. Then the segment is
detached.
5.2 Sockets
225
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
For example, you can obtain the WWW page from a Web server using theTelnet program
because they both use sockets for network communications.To open a connection to a WWW
server at www.codesourcery.com, use telnet www.codesourcery.com 80.The magic constant 80
specifies a connection to the Web server programming running www.codesourcery.com instead
of some other process.Try typing GET / after the connection is established.This sends a message
through the socket to the Web server, which replies by sending the home page’s HTML source
and then closing the connection—for example:
% telnet www.codesourcery.com 80
Trying 206.168.99.1...
Connected to merlin.codesourcery.com (206.168.99.1).
Escape character is ‘^]’.
GET /
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=iso-8859-1”>
...
3. Note that only Windows NT can create a named pipe;Windows 9x programs can form only
client connections.
4. Usually, you’d use telnet to connect a Telnet server for remote logins. But you can also use
telnet to connect to a server of a different kind and then type comments directly at it.
226
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
accept() is used on the server side. It accepts a received incoming attempt to create a new
TCP connection from the remote client, and creates a new socket associated with the
socket address pair of this connection.
send() and recv(), or write() and read(), or sendto() and recvfrom(), are used for sending
and receiving data to/from a remote socket.
close() causes the system to release resources allocated to a socket. In case of TCP, the
connection is terminated.
gethostbyname() and gethostbyaddr() are used to resolve host names and addresses. IPv4
only.
select() is used to pend, waiting for one or more of a provided list of sockets to be ready
to read, ready to write, or that have errors.
poll() is used to check on the state of a socket in a set of sockets. The set can be tested to
see if any socket can be written to, read from or if an error occurred.
getsockopt() is used to retrieve the current value of a particular socket option for the
specified socket.
setsockopt() is used to set a particular socket option for the specified socket.
Connection styles guarantee delivery of all packets in the order they were sent. If
packets are lost or reordered by problems in the network, the receiver automatically
requests their retransmission from the sender.
A connection-style socket is like a telephone call:The addresses of the sender
and receiver are fixed at the beginning of the communication when the connection
is established.
Datagram styles do not guarantee delivery or arrival order. Packets may be lost or
reordered in transit due to network errors or other conditions. Each packet must
be labeled with its destination and is not guaranteed to be delivered.The system
guarantees only “best effort,” so packets may disappear or arrive in a different
order than shipping.
A datagram-style socket behaves more like postal mail.The sender specifies the
receiver’s address for each individual message.
A socket namespace specifies how socket addresses are written. A socket address identifies one
end of a socket connection. For example, socket addresses in the “local namespace” are ordinary
227
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
filenames. In “Internet namespace,” a socket address is composed of the Internet address (also
known as an Internet Protocol address or IP address) of a host attached to the network and a
port number.The port number distinguishes among multiple sockets on the same host.
A protocol specifies how data is transmitted. Some protocols are TCP/IP, the primary
networking protocols used by the Internet; the AppleTalk network protocol; and the UNIX local
communication protocol. Not all combinations of styles, namespaces,and protocols are
supported.
228
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
for ( ; ; ) {
len = sizeof ( struct sockaddr_un ) ;
i f ( ( bytes = recvfrom( srv_fd , buf , MSG_LEN, 0,
( struct sockaddr * ) &cl i_addr , &len ) ) < 1)
err_sys ( " recvfrom error " ) ;
pr int f ( " server received %ld bytes from %s\n" ,
( long) bytes , cl i_addr . sun_path ) ;
for ( i = 0; i < bytes ; i ++)
buf [ i ] = toupper ( ( unsigned char ) buf [ i ] ) ;
i f ( sendto ( srv_fd , buf , bytes , 0,
( struct sockaddr * ) &cl i_addr , len ) != bytes )
err_sys ( " sendto error " ) ;
}
}
#include "uc�proto .h"
int main( int argc , char *argv [ ] ) {
struct sockaddr_un srv_addr , cl i_addr ;
int srv_fd , i ;
size_t len ;
ssize_t bytes ;
char resp [MSG_LEN] ;
i f ( argc < 2)
er r_qui t ( "Usage : uc�c l ient MSG. . . " ) ;
i f ( ( srv_fd = socket (AF_UNIX , SOCK_DGRAM, 0) ) < 0)
err_sys ( " socket error " ) ;
memset(&cl i_addr , 0, sizeof ( struct sockaddr_un ) ) ;
cl i_addr . sun_family = AF_UNIX ;
snpr int f ( cl i_addr . sun_path , sizeof ( cl i_addr . sun_path ) ,
CLI_SOCK_PATH, ( long) getpid ( ) ) ;
i f ( bind ( srv_fd , ( struct sockaddr * ) &cl i_addr ,
sizeof ( struct sockaddr_un ) ) == �1)
err_sys ( " bind error " ) ;
Notes:
the server is persistent and processes one datagram at a time, no matter the client rocess, i.e.
there is no notion of connection messages larger than 10 bytes are silently truncated
We now want to give an example of stream sockets. To do so, we can longer remain in the
abstract of general sockets, but we need to pick a domain. We pick the UNIX domain. In the
UNIX domain, addresses are pathnames. The corresponding Cstructure is sockaddr_un:
struct sockaddr_un {
sa_fami ly_t sun_family ; /* = AF_UNIX */
229
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
Internet-Domain Sockets
UNIX-domain sockets can be used only for communication between two processes on the same
computer. Internet-domain sockets, on the other hand, may be used to connect processes on
different machines connected by a network.
Sockets connecting processes through the Internet use the Internet namespace represented by
PF_INET.The most common protocols are TCP/IP.The Internet Protocol (IP), a low-level
protocol, moves packets through the Internet, splitting and rejoining the packets, if necessary. It
guarantees only “best-effort” delivery, so packets may vanish or be reordered during transport.
Every participating computer is specified using a unique IP number.The Transmission Control
Protocol (TCP), layered on top of IP, provides reliable connection-ordered transport. It permits
telephone-like connections to be established between computers and ensures that data is
delivered reliably and inorder.
DNS Names
Because it is easier to remember names than numbers, the Domain Name Service (DNS)
associates names such as www.codesourcery.com with computers’ unique IP numbers. DNS is
implemented by a worldwide hierarchy of name servers, but you don’t need to understand DNS
protocols to use Internet host names in your programs.
Internet socket addresses contain two parts: a machine and a port number.This information is
stored in a struct sockaddr_in variable. Set the sin_family field to AF_INET to indicate that this
is an Internet namespace address.The sin_addr field stores the Internet address of the desired
machine as a 32-bit integer IP number.A port number distinguishes a given machine’s different
sockets. Because different machines store multibyte values in different byte orders, use htons to
convert the port number to
network byte order. See the man page for ip for more information.To convert human-readable
hostnames, either numbers in standard dot notation (such as 10.0.0.1) or DNS names (such as
www.codesourcery.com) into 32-bit IP numbers, you can use gethostbyname.This returns a
pointer to the struct hostent structure; the h_addr field contains the host’s IP number.
System Calls
Sockets are more flexible than previously discussed communication techniques.These
are the system calls involving sockets:
socket—Creates a socket
closes—Destroys a socket
connect—Creates a connection between two sockets
bind—Labels a server socket with an address
230
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
Sockets are IPC objects that allow to exchange data between processes running:
either on the same machine (host), or on different ones over a network.
The UNIX socket API first appeared in 1983 with BSD 4.2. It has been finally standardized for
the first time in POSIX.1g (2000), but has been ubiquitous to every UNIX implementation since
the 80s.
The socket API is best discussed in a network programming course,which this one is not. We
will only address enough general socketconcepts to describe how to use a specific socket family:
UNIXdomain sockets.
231
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
Connectionless Protocol
Client-server setup
Let’s consider a typical client-server application scenario — no matter if they are located on the
same or different hosts.
Sockets are used as follows:
each application: create a socket
idea: communication between the two applications will flow through an imaginary “pipe” that
will connect the two sockets together
server: bind its socket to a well-known address
we have done the same to set up rendez-vous points for other IPC objects.
e.g. FIFOs
client: locate server socket (via its well-known address) and “initiate communication”1 with the
server.
Socket options:
In order to tell the socket to get the information about the packet destination, we should call
setsockopt().
setsockopt() and getsockopt() - set and get options on a
socket. Both methods return 0 on success and -1 on error.
Prototype: int setsockopt(int sockfd, int level, int optname,...
There are two levels of socket options:
232
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
233
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
The fcntl system call provides further ways to manipulate low level file descriptors.
The call,
returns a new file descriptor with a numerical value equal to or greater than the integer newfd.
The call,
The call,
The calls,
respectively get and set the file status flags and access modes.
234
jntuworldupdates.org Specworld.in
Smartzworld.com Smartworld.asia
235
jntuworldupdates.org Specworld.in