26
 Sri Adichunchanagiri Shikshana Trust ® SJB INSTITUTE OF TECHNOLOGY BGS Health & Education City , Kengeri, Bangalore-60. DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING  A MANUAL FOR VI SEMESTER UNIX SYSTEM PROGRAMMING & COMPILER DESIGN L AB MANUAL  Subject Code: 10CSL68 Prepared By: Dars han K .R Lecturer, Dept.of CS&E

usp&cd labmanual vtu 6th sem

Embed Size (px)

Citation preview

Page 1: usp&cd labmanual vtu 6th sem

8/20/2019 usp&cd labmanual vtu 6th sem

http://slidepdf.com/reader/full/uspcd-labmanual-vtu-6th-sem 1/26

 Sri Adichunchanagiri Shikshana Trust ® 

SJB INSTITUTE OF TECHNOLOGY BGS Health & Education City, Kengeri, Bangalore-60.

DEPARTMENT OF

COMPUTER SCIENCE AND ENGINEERING

 AMANUAL FOR

VI SEMESTER 

UNIX SYSTEM PROGRAMMING&COMPILER DESIGN LAB MANUAL  

Subject Code: 10CSL68

Prepared By:

Darshan K.R

Lecturer, Dept.of CS&E

Page 2: usp&cd labmanual vtu 6th sem

8/20/2019 usp&cd labmanual vtu 6th sem

http://slidepdf.com/reader/full/uspcd-labmanual-vtu-6th-sem 2/26

Unix Systems Programming and Compiler Design Manual 

Prepared By: Darshan.K.R, Dept.of CS&E Page 2

Syllabus

List of Experiments for USP: Design, develop, and execute the following programs 

1.  Write a C/C++ POSIX compliant program to check the following limits:

(i) No. of clock ticks (ii) Max. no. of child processes (iii) Max. path length(iv) Max. no. of characters in a file name (v) Max. no. of open files/ process

2.  Write a C/C++ POSIX compliant program that prints the POSIX defined configuration options supported onany given system using feature test macros.

3.  Consider the last 100 bytes as a region. Write a C/C++ program to check whether the region is locked or not.

If the region is locked, print pid of the process which has locked. If the region is not locked, lock the region

with an exclusive lock, read the last 50 bytes and unlock the region.

4.  Write a C/C++ program which demonstrates interprocess communication between a reader process and a

writer process. Use mkfifo, open, read, write and close APIs in your program.

5.  a) Write a C/C++ program that outputs the contents of its Environment list

 b) Write a C / C++ program to emulate the unix ln command

6.  Write a C/C++ program to illustrate the race condition.

7.  Write a C/C++ program that creates a zombie and then calls system to execute the ps command to verify that

the process is zombie.

8.  Write a C/C++ program to avoid zombie process by forking twice.

9.  Write a C/C++ program to implement the system function.

10.  Write a C/C++ program to set up a real-time clock interval timer using the alarm API.

List of Experiments for Compiler Design:

11.  Write a C program to implement the syntax-directed definition of “if E then S1” and “if E then S1 else S2”.(Refer Fig. 8.23 in the text book prescribed for 06CS62 Compiler Design, Alfred V Aho, Ravi Sethi, and

Jeffrey D Ullman: Compilers- Principles, Techniques and Tools, Addison-Wesley, 2007).

12.  Write a yacc program that accepts a regular expression as input and produce its parse tree as output.

Note: In the examination each student picks one question from the lot of all 12 questions.

Page 3: usp&cd labmanual vtu 6th sem

8/20/2019 usp&cd labmanual vtu 6th sem

http://slidepdf.com/reader/full/uspcd-labmanual-vtu-6th-sem 3/26

Unix Systems Programming and Compiler Design Manual 

Prepared By: Darshan.K.R, Dept.of CS&E Page 3

1. Write a C/C++ POSIX compliant program to check the following limits:

(i) No. of clock ticks (ii) Max. no. of child processes (iii) Max. path length

(iv) Max. no. of characters in a file name (v) Max. no. of open files/ process

To Open the Editor with filename

[root@localhost /]# gedit limit.cpp

#def i ne _POSI X_SOURCE#def i ne _POSI X_C_SOURCE 199309L#i ncl ude<i ost r eam>#i ncl ude<uni st d. h>i nt mai n( ){

usi ng namespace st d;i nt res ;

i f ( ( r es=sysconf ( _SC_CLK_TCK) ) ==- 1)cout <<"Syst em doesnot support \ n" ;

el secout <<"Number of Cl ock Ti ck: "<<r es<<endl ;

i f ( ( r es=sysconf ( _SC_CHI LD_MAX) ) ==- 1)cout <<"Syst em doesnot support \ n" ;

el secout<<"Maxi mum Number of Chi l d Pr ocess t hat process can

cr eat e: "<<r es<<endl ;

i f ( ( r es=pathconf ( “/ ”, _PC_PATH_MAX) ) ==- 1)cout <<"Syst em doesnot support \ n" ;

el secout <<"Maxi mum Pat h Length: "<<r es<<endl ;

i f ( ( r es=pathconf ( “/ ”, _PC_NAME_MAX) ) ==- 1)cout <<"Syst em doesnot support \ n" ;

el secout <<"Maxi mum No. of Char act er i n a f i l ename: "<<r es<<endl ;

i f ( ( r es=sysconf ( _SC_OPEN_MAX) ) ==- 1)cout <<"Syst em doesnot support \ n" ;

el secout <<"Maxi mum Number of opened f i l es per

process: "<<r es<<endl ;

r et ur n 0;}

Page 4: usp&cd labmanual vtu 6th sem

8/20/2019 usp&cd labmanual vtu 6th sem

http://slidepdf.com/reader/full/uspcd-labmanual-vtu-6th-sem 4/26

Unix Systems Programming and Compiler Design Manual 

Prepared By: Darshan.K.R, Dept.of CS&E Page 4

To Run the Program

[ r oot @l ocal host / ] # g++ l i mi t . cpp[ r oot @l ocal host / ] # . / a. out

OUTPUT

Number of Cl ock Ti ck: 100Maxi mum Number of Chi l d Pr ocess t hat process can cr eat e: 999Maxi mum Pat h Lengt h: 4096Maxi mum No. of Character i n a f i l ename: 255Maxi mum Number of opened f i l es per process: 1024

Page 5: usp&cd labmanual vtu 6th sem

8/20/2019 usp&cd labmanual vtu 6th sem

http://slidepdf.com/reader/full/uspcd-labmanual-vtu-6th-sem 5/26

Unix Systems Programming and Compiler Design Manual 

Prepared By: Darshan.K.R, Dept.of CS&E Page 5

2. Write a C/C++ POSIX compliant program that prints the POSIX defined configuration

options supported on any given system using feature test macros.

To Open the Editor with filename

[ r oot @l ocal host / ] # gedi t t est macr o. cpp

#def i ne _POSI X_SOURCE#def i ne _POSI X_C_SOURCE 199309L#i ncl ude<i ost r eam>#i ncl ude<uni st d. h>i nt mai n( ){

usi ng namespace st d;#i f def _POSI X_J OB_CONTROL

cout <<"Syst em Support s J ob Cont r ol f eatur e"<<endl ;

#el secout <<"Syst em doesnot suppor t j ob cont r ol \ n" ;

#endi f

#i f def _POSI X_SAVED_I DScout <<"Syst em Suppor t s saved set - UI D and saved set - GI D"<<endl ;

#el secout <<"Syst em doesnot support saved set - UI D\ n" ;

#endi f

#i f def _POSI X_CHOWN_RESTRI CTED

cout <<"Syst em Suppor t s Change Owner shi p f eat ure: "<<endl ;#el se

cout <<"Syst em doesnot suppor t change Ownershi p f eat ur e\ n";#endi f

#i f def _POSI X_NO_TRUNCcout <<"Syst em Support s Pat h t r uncat i on opt i on: "<<endl ;

#el secout <<"Syst em doesnot suppor t Pat h t r uncat i on \ n" ;

#endi f

#i f def _POSI X_VDI SABLEcout <<"Syst em Suppor t s Di sabl e Char act er f or f i l es: "<<endl ;#el se

cout <<"Syst em doesnot support Di sabl e Character s \ n" ;#endi f

r et ur n 0;

}

Page 6: usp&cd labmanual vtu 6th sem

8/20/2019 usp&cd labmanual vtu 6th sem

http://slidepdf.com/reader/full/uspcd-labmanual-vtu-6th-sem 6/26

Unix Systems Programming and Compiler Design Manual 

Prepared By: Darshan.K.R, Dept.of CS&E Page 6

To Run the Program

[ r oot @l ocal host / ] # g++ t est macro. cpp[ r oot @l ocal host / ] # . / a. out

OUTPUT

Syst em Suppor t s J ob Cont r ol f eat ur eSyst em Support s saved set - UI D and saved set - GI DSyst em Suppor t s Change Ownershi p f eat ureSyst em Suppor t s Pat h t r uncat i on opt i onSyst em Suppor t s Di sabl e Char act er f or f i l es

Page 7: usp&cd labmanual vtu 6th sem

8/20/2019 usp&cd labmanual vtu 6th sem

http://slidepdf.com/reader/full/uspcd-labmanual-vtu-6th-sem 7/26

Unix Systems Programming and Compiler Design Manual 

Prepared By: Darshan.K.R, Dept.of CS&E Page 7

3. Consider the last 100 bytes as a region. Write a C/C++ program to check whether the

region is locked or not. If the region is locked, print pid of the process which has locked. If

the region is not locked, lock the region with an exclusive lock, read the last 50 bytes and

unlock the region.

[ r oot @l ocal host / ] # gedi t l ock. c

#i ncl ude <st di o. h>#i ncl ude <st dl i b. h>#i ncl ude <er r no. h>#i ncl ude <f cnt l . h>#i ncl ude <uni st d. h>

i nt mai n( i nt ar gc, char *ar gv[ ] ){

/ * l _t ype l _whence l _star t l _ l en l _pi d*/st r uct f l ock f l = {F_UNLCK, SEEK_SET, 0, 100, 0 };i nt f d;

i nt f si ze, of f set ;char buf [ 50] ;i f ( ( f d = open( argv[ 1] , O_RDWR) ) == - 1){

per r or ( "Can' t open f i l e") ;exi t ( 1) ;

}pr i nt f ( "Fi l e i s Not Locked by any Pr ocess\ n") ;pr i nt f ( "Pr ess Ent er t o Lock the Fi l e\ n") ;pr i nt f ( " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ n" ) ;get char ( ) ;f l . l _t ype = F_WRLCK;

f l . l _pi d = get pi d( ) ;i f ( f cnt l ( f d, F_SETLK, &f l ) == - 1){

per r or ( "Can' t set Excul si ve Lock") ;exi t ( 1) ;

}

el se i f ( f l . l _t ype! =F_UNLCK){pr i nt f ( "Fi l e has been Excul si vel y Locked by pr ocess: %d\ n", f l . l _pi d) ;

}el se{

pr i nt f ( "Fi l e i s not Locked\ n") ;}

pr i nt f ( "Press ENTER t o Rel ease l ock: \ n") ;get char ( ) ;f l . l _t ype = F_UNLCK;pr i nt f ( "Fi l e has been Unl ocked\ n") ;f si ze=l seek( f d, 0, SEEK_END) ;of f set =f si ze- 50;

Page 8: usp&cd labmanual vtu 6th sem

8/20/2019 usp&cd labmanual vtu 6th sem

http://slidepdf.com/reader/full/uspcd-labmanual-vtu-6th-sem 8/26

Unix Systems Programming and Compiler Design Manual 

Prepared By: Darshan.K.R, Dept.of CS&E Page 8

l seek( f d, of f set , SEEK_SET) ;r ead( f d, buf , 50) ;pr i nt f ( "Last 50 Byt e Cont ent i n t he f i l e i s\ n") ;pr i nt f ( "====================================\ n" ) ;pr i nt f ( "%s\ n", buf ) ;r et ur n 0;

}

To Run Program

Cr eat e a f i l e, here we ar e cr eat i ng a f i l e wi t h name demo wi t h t hef ol l owi ng Cont ent :

Consi der t he l ast 100 byt es as a r egi on. Wr i t e a C/ C++ pr ogr am t o checkwhet her t he r egi on i s l ocked.

[ r oot @l ocal host / ] # cc l ock. c

[ r oot @l ocal host / ] # . / a. out demo

OUTPUT

Fi l e i s Not Locked by any Pr ocessPr ess Ent er t o Lock t he Fi l e- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Fi l e has been Excl usi vel y Locked by pr ocess: 4087Press Any Key t o r el ease l ock:

Fi l e has been Unl ocked

Last 50 Byt e Cont ent i n t he f i l e i s====================================/ C++ pr ogr am t o check whether t he r egi on i s l ocked

Page 9: usp&cd labmanual vtu 6th sem

8/20/2019 usp&cd labmanual vtu 6th sem

http://slidepdf.com/reader/full/uspcd-labmanual-vtu-6th-sem 9/26

Unix Systems Programming and Compiler Design Manual 

Prepared By: Darshan.K.R, Dept.of CS&E Page 9

4. Write a C/C++ program which demonstrates interprocess communication between a

reader process and a writer process. Use mkfifo, open, read, write and close APIs in your

program.

[ r oot @l ocal host / ] # gedi t wr i t er . c

Writer Process (writer.c)

#i ncl ude <f cnt l . h>#i ncl ude <sys/ st at . h>#i ncl ude <sys/ t ypes. h>#i ncl ude <uni st d. h>

i nt mai n( ){

i nt f d;char * myf i f o = " / t mp/ myf i f o" ; / * cr eat e t he FI FO ( named pi pe) */

mkf i f o( myf i f o, 0666) ;pr i nt f ( "Run Reader pr ocess t o r ead t he FI FO Fi l e\ n" ) ;f d = open( myf i f o, O_WRONLY) ;wr i t e( f d, "Hi " , s i zeof ( "Hi ") ) ; / * wr i t e "Hi " t o t he FI FO * /cl ose( f d) ;

unl i nk(myf i f o) ; / * r emove t he FI FO */r et ur n 0;

}

[ r oot @l ocal host / ] # gedi t r eader . c

Reader Process (reader.c)

#i ncl ude <f cnt l . h>#i ncl ude <sys/ st at . h>#i ncl ude <sys/ t ypes. h>#i ncl ude <uni st d. h>#def i ne MAX_BUF 1024i nt mai n( ){

i nt f d;char *myf i f o = " / t mp/ myf i f o";char buf [ MAX_BUF] ;

/ * open, r ead, and di spl ay t he message f r om t he FI FO */f d = open( myf i f o, O_RDONLY) ;r ead( f d, buf , MAX_BUF) ;pr i nt f ( "Recei ved: %s\ n", buf ) ;cl ose( f d) ;

r et ur n 0;}

Page 10: usp&cd labmanual vtu 6th sem

8/20/2019 usp&cd labmanual vtu 6th sem

http://slidepdf.com/reader/full/uspcd-labmanual-vtu-6th-sem 10/26

Unix Systems Programming and Compiler Design Manual 

Prepared By: Darshan.K.R, Dept.of CS&E Page 10

To Run the Program

[ r oot @l ocal host / ] # cc wr i t er . c[ r oot @l ocal host / ] # . / a. out

Run Reader pr ocess t o read t he FI FO Fi l e

Af t er t hi s Open New Ter mi nal by pr essi ng shi f t +ct r l +N or Go to Fi l e->Open Ter mi nal

[ r oot @l ocal host / ] # cc reader . c[ r oot @l ocal host / ] # . / a. out

OUTPUT

Recei ved: Hi

Page 11: usp&cd labmanual vtu 6th sem

8/20/2019 usp&cd labmanual vtu 6th sem

http://slidepdf.com/reader/full/uspcd-labmanual-vtu-6th-sem 11/26

Unix Systems Programming and Compiler Design Manual 

Prepared By: Darshan.K.R, Dept.of CS&E Page 11

5a) Write a C/C++ program that outputs the contents of its Environment list

[ r oot @l ocal host / ] # gedi t env. c

#i ncl ude<st di o. h>#i ncl ude<st dl i b. h>

i nt mai n( ){

i nt i ;char **pt r ;exter n char **envi r on;pr i nt f ( "Li st of Envi r onment al Var i abl e\ n") ;pr i nt f ( " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ n" ) ;f or ( pt r = envi r on; *pt r ! = 0; pt r ++)

pr i nt f ( "%s\ n" , *pt r ) ;

exi t ( 0) ;}

To Run the Program

[ r oot @l ocal host / ] # cc env. c[ r oot @l ocal host / ] # . / a. out

OUTPUT

Li st of Envi r onment al Var i abl e

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

SSH_AGENT_PI D=3008HOSTNAME=l ocal host . l ocal domai nDESKTOP_STARTUP_I D=SHELL=/ bi n/ bash

 TERM=xt er mHI STSI ZE=1000KDE_NO_I PV6=1GTK_RC_FI LES=/ et c/ gt k/ gt krc: / r oot / . gt krc- 1. 2- gnome2WI NDOWI D=50331729QTDI R=/ usr / l i b/ qt - 3. 3

QTI NC=/ usr / l i b/ qt - 3. 3/ i ncl udeUSER=r ootHOME=/ r ootSHLVL=2GNOME_DESKTOP_SESSI ON_I D=Def aul tLOGNAME=r ootQTLI B=/ usr/ l i b/ qt - 3. 3/ l i bCVS_RSH=ssh

Page 12: usp&cd labmanual vtu 6th sem

8/20/2019 usp&cd labmanual vtu 6th sem

http://slidepdf.com/reader/full/uspcd-labmanual-vtu-6th-sem 12/26

Unix Systems Programming and Compiler Design Manual 

Prepared By: Darshan.K.R, Dept.of CS&E Page 12

5b. Write a C / C++ program to emulate the unix ln command

[ r oot @l ocal host / ] # gedi t l n. cpp

#i ncl ude<i ost r eam>

#i ncl ude<uni st d. h>i nt mai n( i nt ar gc, char * ar gv[ ] ){

usi ng namespace st d;i f ( ar gc!=3){

cout <<"Usage . / a. out sour cef i l e dest i nat i on f i l e\ n";r et ur n 0;

}

i f ( l i nk( ar gv[ 1] , ar gv[ 2] ) ==- 1){

cout <<"Can' t Li nk\ n" ;r et ur n 1;}

el se{

cout <<"Fi l es have been Li nked\ n" ;}

r et ur n 0;}

To Run the Program

[ r oot @l ocal host / ] # g++ l n. cpp[ r oot @l ocal host / ] # . / a. out l n. cpp newf i l ename

OUTPUT

Fi l es have been Li nked[ r oot @l ocal host / ] # gedi t newf i l ename ( The Cont ent of Sour ce f i l e Wi l lbe Copi ed t o newf i l ename)

Page 13: usp&cd labmanual vtu 6th sem

8/20/2019 usp&cd labmanual vtu 6th sem

http://slidepdf.com/reader/full/uspcd-labmanual-vtu-6th-sem 13/26

Unix Systems Programming and Compiler Design Manual 

Prepared By: Darshan.K.R, Dept.of CS&E Page 13

6. Write a C/C++ program to illustrate the race condition.

[ r oot @l ocal host / ] # gedi t r ace. c

#i ncl ude<st di o. h>#i ncl ude<st dl i b. h>#i ncl ude<err or . h>

st at i c voi d char at at i me( char *) ;

i nt mai n( voi d){

pi d_t pi d;

i f ( ( pi d = f or k( ) ) < 0){

pr i nt f ( " f ork er r or " ) ;}

el se i f ( pi d == 0){

char at at i me( "out put f r om chi l d\ n") ;} el se{

char at at i me( "out put f r om par ent \ n") ;}exi t ( 0) ;

}

st at i c voi d char at at i me( char * st r ){

char *pt r ;i nt c;

set buf ( st dout , NULL) ; / * set unbuf f er ed */f or ( pt r = st r ; ( c = *pt r ++) ! = 0; )

put c(c, stdout ) ;}

To Run the Program

[ r oot @l ocal host / ] # cc race. c[ r oot @l ocal host / ] # . / a. out

OUTPUT

out put f r om chi l dout put f r om par ent[ r oot @l ocal host / ] # . / a. outout put f r om cohui t l pdut f r om par ent[ r oot @l ocal host / ] # . / a. outoouut t ppuut t f f r r oomm pcahr i el dnt

Page 14: usp&cd labmanual vtu 6th sem

8/20/2019 usp&cd labmanual vtu 6th sem

http://slidepdf.com/reader/full/uspcd-labmanual-vtu-6th-sem 14/26

Unix Systems Programming and Compiler Design Manual 

Prepared By: Darshan.K.R, Dept.of CS&E Page 14

7. Write a C/C++ program that creates a zombie and then calls system to execute the ps

command to verify that the process is zombie.

[ r oot @l ocal host / ] # gedi t zombi e. c

#i ncl ude <st dl i b. h>#i ncl ude <sys/ t ypes. h>#i ncl ude <uni st d. h>

i nt mai n ( ){

pi d_t chi l d_pi d; / * Cr eat e a chi l d pr ocess. */chi l d_pi d = f or k ( ) ;

i f ( chi l d_pi d == 0){

exi t ( 0) ; / * Thi s i s t he chi l d pr ocess. Exi t i mmedi at el y. * /

}el se{

sl eep( 3) ; / * Thi s i s t he par ent pr ocess. Sl eep f or a mi nut e. */syst em( "ps - e - o pi d, ppi d, st at , cmd") ;

}r et ur n 0;}

To Run the Program

[ r oot @l ocal host / ] # cc zombi e. c

[ r oot @l ocal host / ] # . / a. out

OUTPUT

PI D PPI D STAT CMD1 0 Ss i ni t [ 5]2 1 S [ mi gr at i on/ 0]3 1 SN [ ksof t i r qd/ 0]4 1 S [ wat chdog/ 0]5 1 S [ mi gr at i on/ 1]6 1 SN [ ksof t i r qd/ 1]

7 1 S [ wat chdog/ 1]8 1 S [ mi gr at i on/ 2]9 1 SN [ ksof t i r qd/ 2]

10 1 S [ wat chdog/ 2]3087 3084 S gnome- pt y- hel per3088 3084 Ss bash3166 3088 S+ ./a.out

3167 3166 Z+ [a.out] <defunct> //Zombie Process

3168 3166 R+ ps -e -o pid,ppid,stat,cmd

Page 15: usp&cd labmanual vtu 6th sem

8/20/2019 usp&cd labmanual vtu 6th sem

http://slidepdf.com/reader/full/uspcd-labmanual-vtu-6th-sem 15/26

Unix Systems Programming and Compiler Design Manual 

Prepared By: Darshan.K.R, Dept.of CS&E Page 15

8. Write a C/C++ program to avoid zombie process by forking twice.

[ r oot @l ocal host / ] # gedi t avoi dzombi e. c

#i ncl ude<st di o. h>#i ncl ude <sys/ wai t . h>

#i ncl ude<er r no. h>#i ncl ude<st dl i b. h>

i nt mai n( ){

pi d_t pi d;

i f ( ( pi d = f or k( ) ) < 0){

pr i nt f ( " f ork er r or " ) ;}el se i f ( pi d == 0)

{ / * f i r s t chi l d */i f ( ( pi d = f or k( ) ) < 0)pr i nt f ( " f ork er r or " ) ;

el se i f ( pi d > 0)exi t ( 0) ;

sl eep( 2) ;pr i nt f ( "second chi l d, par ent pi d = %d\ n", get ppi d( ) ) ;exi t ( 0) ;

}

i f ( wai t pi d( pi d, NULL, 0) ! = pi d) / * wai t f or f i r st chi l d * /pr i nt f ( "wai t pi d er r or" ) ;

exi t ( 0) ;}

To Run the Program

[ r oot @l ocal host / ] # cc avoi dzombi e. c[ r oot @l ocal host / ] # . / a. out

OUTPUT

Second Chi l d, parent pi d=1

Page 16: usp&cd labmanual vtu 6th sem

8/20/2019 usp&cd labmanual vtu 6th sem

http://slidepdf.com/reader/full/uspcd-labmanual-vtu-6th-sem 16/26

Unix Systems Programming and Compiler Design Manual 

Prepared By: Darshan.K.R, Dept.of CS&E Page 16

9. Write a C/C++ program to implement the system function.

[ r oot @l ocal host / ] # gedi t syst em. c

#i ncl ude<sys/ wai t . h>#i ncl ude<er r no. h>

#i ncl ude<uni st d. h>#i ncl ude<st di o. h>#i ncl ude<st dl i b. h>

i nt syst em1( const char *cmdst r i ng){

pi d_t pi d;i nt stat us;

i f ( cmdst r i ng == NULL)r et ur n( 1) ;

i f ( ( pi d = f or k( ) ) < 0){st at us = - 1;

}el se i f ( pi d == 0)

{ / * chi l d * /execl ( "/ bi n/ sh", "sh", "- c", cmdstr i ng, ( char *) 0) ;

 _exi t ( 127) ; / * execl er r or */}

el se / * par ent */whi l e ( wai t pi d( pi d, &st at us, 0) < 0){

i f ( er r no ! = EI NTR)st at us = - 1; / * er r or ot her t han EI NTR f r om wai t pi d( ) */

br eak;}

r et ur n( status) ;}

i nt mai n( ){

i nt s tat us ;

i f ( ( st at us = system1( "dat e") ) < 0)

pr i nt f ( "system( ) er r or ") ;

i f ( ( st at us = syst em1( "who" ) ) < 0)pr i nt f ( "system( ) er ror" ) ;

exi t ( 0) ;}

Page 17: usp&cd labmanual vtu 6th sem

8/20/2019 usp&cd labmanual vtu 6th sem

http://slidepdf.com/reader/full/uspcd-labmanual-vtu-6th-sem 17/26

Unix Systems Programming and Compiler Design Manual 

Prepared By: Darshan.K.R, Dept.of CS&E Page 17

To Run The Program

[ r oot @l ocal host / ] # cc syst em. c[ r oot @l ocal host / ] # . / a. out

OUTPUT

Sun Dec 30 08: 38: 10 I ST 2012r oot pt s/ 0 2012- 12- 30 08: 34 ( : 0. 0)

Page 18: usp&cd labmanual vtu 6th sem

8/20/2019 usp&cd labmanual vtu 6th sem

http://slidepdf.com/reader/full/uspcd-labmanual-vtu-6th-sem 18/26

Unix Systems Programming and Compiler Design Manual 

Prepared By: Darshan.K.R, Dept.of CS&E Page 18

10. Write a C/C++ program to set up a real-time clock interval timer using the alarm API.

[ r oot @l ocal host / ] # gedi t al ar m. c

#i ncl ude<si gnal . h>#i ncl ude<st di o. h>

#i ncl ude<uni st d. h>#i ncl ude<er r no. h>

voi d wakeup( ){

pr i nt f ( "Hel l o\ n" ) ;pr i nt f ( " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ n" ) ;

}

i nt mai n( ){

i nt i ;

st r uct si gact i on act i on;act i on. sa_handl er =wakeup;act i on. sa_f l ags=SA_RESTART;si gempt yset ( &act i on. sa_mask) ;

i f ( si gact i on( SI GALRM, &act i on, 0) ==- 1){

perr or( "s i gact i on") ;}whi l e( 1){

al ar m( 5) ;pause( ) ;pr i nt f ( "Wai t i ng For Al ar m\ n") ;

}r et ur n 0;}

To Run the Program

[ r oot @l ocal host / ] # cc al ar m. c[ r oot @l ocal host / ] # . / a. out

OUTPUT

Hel l o- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Wai t i ng For Al ar mHel l o- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ( Af t er 5 CPU Cl ockcycl e)Wai t i ng For Al ar mHel l o- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ( Af t er 5 CPU Cl ockcycl e)Wai t i ng For Al ar m

Page 19: usp&cd labmanual vtu 6th sem

8/20/2019 usp&cd labmanual vtu 6th sem

http://slidepdf.com/reader/full/uspcd-labmanual-vtu-6th-sem 19/26

Unix Systems Programming and Compiler Design Manual 

Prepared By: Darshan.K.R, Dept.of CS&E Page 19

11. Write a C program to implement the syntax-directed definition of “if E then S1” and “if

E then S1 else S2”.

[ r oot @l ocal host / ] # gedi t sdd. c

#i ncl ude<st di o. h>#i ncl ude<st dl i b. h>#i ncl ude<st r i ng. h>i nt par secondi t i on( char[ ] , i nt , char * , i nt ) ;voi d gen( char[ ] , char [ ] , char [ ] , i nt ) ;

i nt mai n( ){i nt count er =0, st l en=0, el sef l ag=0;char st mt [ 60] ;char st r B[ 54] ;char st r S1[ 50] ;char st r S2[ 45] ;

pr i nt f ( " f ormat of i f s tat ement \ n exampl e. . . . . . . . . . . . \ n" ) ;pr i nt f ( " i f ( a<b) then( s , a) ; \ n" ) ;pr i nt f ( " i f ( a<b) then( s , a) el se ( s , b) ; \ n\ n" ) ;pr i nt f ( "ent er t he st at ement \ n") ;scanf ( "%s" , &st mt ) ;

st l en=st r l en( st mt ) ;counter=counter+2;count er =par secondi t i on( st mt , count er , st r B, st l en) ;i f ( st mt [ count er ] ==' ) ' )count er++;

counter=counter+3;count er =par secondi t i on( st mt , count er , st r S1, st l en) ;i f ( st mt [ count er +1] ==' ; ' ){

pr i nt f ( "\ n par si ng t he i nput st at ement . . . \ n") ;gen( str B, str S1, str S2, el sef l ag) ;r et ur n 0;

}i f ( st mt [ count er ] ==' ) ' )count er++;count er=count er+3;count er =par secondi t i on( st mt , count er , st r S2, st l en) ;

count er=count er+2;i f ( count er ==st l en){el sef l ag=1;pr i nt f ( "\ n par si ng t he i nput st at ement ") ;gen( str B, str S1, str S2, el sef l ag) ;r et ur n 0;

}r et ur n 0;

}

Page 20: usp&cd labmanual vtu 6th sem

8/20/2019 usp&cd labmanual vtu 6th sem

http://slidepdf.com/reader/full/uspcd-labmanual-vtu-6th-sem 20/26

Unix Systems Programming and Compiler Design Manual 

Prepared By: Darshan.K.R, Dept.of CS&E Page 20

i nt par secondi t i on( char i nput [ ] , i nt cnt r , char *dest , i nt t ot al l en){

i nt i ndex=0, pos=0;whi l e( i nput [ cnt r ] ! =' ( ' && cnt r <=t ot al l en)cnt r ++;i f ( cnt r >=t ot al l en)

r et ur n 0;i ndex=cnt r ;whi l e( i nput [ cnt r] ! =' ) ' )cnt r ++;i f ( cnt r >=t ot al l en)r et ur n 0;whi l e( i ndex<=cnt r )dest [ pos++] =i nput [ i ndex++] ;dest [ pos]=' \ 0' ;r et ur n cnt r ;

}voi d gen( char B[ ] , char S1[ ] , char S2[ ] , i nt el separ t )

{i nt Bt =101, Bf =102, Sn=103;pr i nt f ( "\ n\ t i f %s got o %d", B, Bt ) ;pr i nt f ( "\ n\ t got o %d", Bf ) ;pr i nt f ( " \ n %d: " , Bt ) ;pr i nt f ( "%s", S1) ;

i f ( ! el separ t )pr i nt f ( " \ n %d: " , Bf ) ;el se{

pr i nt f ( "\ n\ t got o %d", Sn) ;pr i nt f ( "\ n %d : %s", Bf , S2) ;pr i nt f ( " \ n %d: " , Sn) ;

}}

To Run the Program

[ r oot @l ocal host / ] # cc sdd. c[ r oot @l ocal host / ] # . / a. out

Page 21: usp&cd labmanual vtu 6th sem

8/20/2019 usp&cd labmanual vtu 6th sem

http://slidepdf.com/reader/full/uspcd-labmanual-vtu-6th-sem 21/26

Unix Systems Programming and Compiler Design Manual 

Prepared By: Darshan.K.R, Dept.of CS&E Page 21

OUTPUT

f or mat of i f st at ementexampl e. . . . . . . . . . . .

i f ( a<b) t hen( s, a) ;i f ( a<b) t hen( s, a) el se ( s, b) ;

ent er t he st at ementi f ( a<b) t hen( s, a) ;

par si ng the i nput st at ement . . .

i f ( a<b) goto 101got o 102

101: ( s, a)102:

[ r oot @l ocal host / ] # . / a. out

f or mat of i f st at ementexampl e. . . . . . . . . . . .

i f ( a<b) t hen( s, a) ;i f ( a<b) t hen( s, a) el se ( s, b) ;

ent er t he st at ementi f ( a<b) t hen( s, a) el se( s, b) ;

par si ng t he i nput st at ementi f ( a<b) goto 101

got o 102101: ( s, a)got o 103

102 : ( s, b)103:

Page 22: usp&cd labmanual vtu 6th sem

8/20/2019 usp&cd labmanual vtu 6th sem

http://slidepdf.com/reader/full/uspcd-labmanual-vtu-6th-sem 22/26

Unix Systems Programming and Compiler Design Manual 

Prepared By: Darshan.K.R, Dept.of CS&E Page 22

12. Write a yacc program that accepts a regular expression as input and produce its parse

tree as output

[ r oot @l ocal host / ] # gedi t par se. y

%{#i ncl ude<ct ype. h>char str [ 20] ;i nt i =0;%}%t oken i d%l ef t ' +' ' / ' ' * ' ' - '%%

E: S {i nf i x_post f i x(s t r ) ; }S: S' +' T| S' - ' T| T

 T: T' *' F| T' / ' F| FF: i d| ' ( ' S' ) ';

%%#i ncl ude<st di o. h>mai n( ){pr i nt f ( "\ n Ent er t he gr ammar : ") ;yypar se( ) ;}yyerror(){pr i nt f ( " i nval i d" ) ;

}yyl ex( ){char ch=' ' ;

whi l e( ch! =' \ n' ){

ch=get char ( ) ;st r [ i ++] =ch;i f ( i sal pha(ch) ) return i d;i f ( ch==' +' | | ch==' *' | | ch==' - ' | | ch==' / ' ) r et ur n ch; }st r [ - - i ] =' \ 0' ;

r et ur n( 0) ;

exi t ( 0) ;}

voi d push( char st ack[ ] , i nt *t op, char ch){

st ack[ ++( *t op) ] =ch;}

Page 23: usp&cd labmanual vtu 6th sem

8/20/2019 usp&cd labmanual vtu 6th sem

http://slidepdf.com/reader/full/uspcd-labmanual-vtu-6th-sem 23/26

Unix Systems Programming and Compiler Design Manual 

Prepared By: Darshan.K.R, Dept.of CS&E Page 23

char pop( char st ack[ ] , i nt *t op){

r et urn( stack[ ( * top) - - ] ) ;}i nt pr ec( char ch){

swi t ch( ch){

case ' / ' :case ' * ' : r et urn 2;case ' +' :case ' - ' : r et ur n 1;case ' ( ' : r et urn 0;def aul t : r et ur n - 1;

}}voi d i nf i x_post f i x( char i nf i x[ ] ){

i nt t op=- 1, i pt r =- 1, ppt r =- 1;char post f i x[20] , st ack[ 20] , st ksymb, cur symb;push( st ack, &t op, ' \ 0' ) ;whi l e( ( cur symb=i nf i x[ ++i pt r ] ) ! =' \ 0' ){swi t ch( cur symb){case ' ( ' : push( st ack, &t op, cur symb) ;

br eak;case ' ) ' : st ksymb=pop( st ack, &t op) ;

whi l e( st ksymb! =' ( ' ){

post f i x[ ++ppt r ] =st ksymb;st ksymb=pop(st ack, &t op) ;

}br eak;

case ' * ' :case ' / ' :case ' +' :case ' - ' : whi l e ( pr ec( st ack[ t op] ) >=pr ec( cur symb) )

post f i x[++ppt r ] =pop( st ack, &t op) ;push(st ack, &t op, cur symb) ;

br eak;def aul t : i f ( i sal num( cur symb) ==0){

pr i nt f ( "er r or i n i nput : " ) ;exi t ( 0) ;

}post f i x[ ++ppt r ] =cursymb;} }whi l e( t op! =- 1)post f i x[++ppt r ] =pop( st ack, &t op) ;pr i nt f ( "%s\ n", post f i x) ;}

Page 24: usp&cd labmanual vtu 6th sem

8/20/2019 usp&cd labmanual vtu 6th sem

http://slidepdf.com/reader/full/uspcd-labmanual-vtu-6th-sem 24/26

Unix Systems Programming and Compiler Design Manual 

Prepared By: Darshan.K.R, Dept.of CS&E Page 24

To Run the Program

[ r oot @l ocal host / ] # yacc –d par se. y[ r oot @l ocal host / ] # cc y. t ab. c –l l[ r oot @l ocal host / ] #. / a. out

OUTPUT

Ent er t he gr ammar : ( a*b) +c- ( d*e)ab*c+de*-

Page 25: usp&cd labmanual vtu 6th sem

8/20/2019 usp&cd labmanual vtu 6th sem

http://slidepdf.com/reader/full/uspcd-labmanual-vtu-6th-sem 25/26

Unix Systems Programming and Compiler Design Manual 

Prepared By: Darshan.K.R, Dept.of CS&E Page 25

VIVA Question

1. What are the differences between ANSI C and K & R C?

2. Explain feature test macros. Write a C/C++ POSIX compliant program that is

supported on any given system using feature test macros.

3. Explain the common characteristics of API and describe the error status codes.

4. Describe the characteristics of POSIX.1 FIPS standard and X/Open standard.

5. Differentiate between ANSI C and C++ standards

6. Explain the different file types available in UNIX and POSIX systems

7. Differentiate between hard links and symbolic links with an example.

8. Describe Inode table entries

9. Write a C/C++ program to emulate the UNIX mv command

10. Explain how fcntl API is used for file and record locking.

11. Write the code segment in C that reads utmost 100 bytes into a variable but from

standard input.

12. List and explain the access mode flags and access modifier flags. Also explain how

the permission value specified in an ‘open’ call is modified by its calling process

‘umask’ value.

13. Explain the process of changing user and group ID of files

14. What are named pipes? Explain with an example the use of lseek, link, access with

their prototypes and argument values.

15. Describe the structure of stat system call along with declarations. Also write struct stat

structure.

16. Write a C program to implement the UNIX chown functions

17. Explain Open, Creat, read and fcntl APIs with example

18. With an example program, explain the use of setjmp and longjmp functions.

19. Explain how a C program can be started and various ways of termination.

20. Briefly explain the memory layout of a C program

21. What is fork and vfork? Explain with an example program for each.

22. What is a zombie process?

23. How does UNIX operating system keep process accounting? Write a program to

generate accounting data and give its process structure.

24. Write a C/C++ program to obtain process attributes.

25. Explain wait, waitpid, wait3 and wait4 functions with their prototypes and uses

Page 26: usp&cd labmanual vtu 6th sem

8/20/2019 usp&cd labmanual vtu 6th sem

http://slidepdf.com/reader/full/uspcd-labmanual-vtu-6th-sem 26/26

Unix Systems Programming and Compiler Design Manual 

26. Explain different exec functions? Describe how their functioning differs from each

other.

27. Write short notes on Race condition

28. Write a program that execs an interpreter file.

29. What is process Identifier? Mention the commands for getting different ID’s of calling

process