+ All Categories
Home > Documents > Sri Adichunchanagiri Shikshana Trust ® SJB INSTITUTE OF ...

Sri Adichunchanagiri Shikshana Trust ® SJB INSTITUTE OF ...

Date post: 29-Jan-2022
Category:
Upload: others
View: 3 times
Download: 0 times
Share this document with a friend
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 LAB MANUAL Subject Code: 10CSL68 Prepared By: Darshan K.R Lecturer, Dept.of CS&E
Transcript

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 LAB MANUAL

Subject Code: 10CSL68

Prepared By:

Darshan K.R Lecturer, Dept.of CS&E

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 on any 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.

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 #define _POSIX_SOURCE #define _POSIX_C_SOURCE 199309L #include<iostream> #include<unistd.h> int main() { using namespace std; int res;

if((res=sysconf(_SC_CLK_TCK))==-1) cout<<"System doesnot support\n"; else cout<<"Number of Clock Tick:"<<res<<endl;

if((res=sysconf(_SC_CHILD_MAX))==-1) cout<<"System doesnot support\n"; else cout<<"Maximum Number of Child Process that process can create:"<<res<<endl; if((res=pathconf(“/”,_PC_PATH_MAX))==-1) cout<<"System doesnot support\n"; else cout<<"Maximum Path Length:"<<res<<endl; if((res=pathconf(“/”,_PC_NAME_MAX))==-1) cout<<"System doesnot support\n"; else cout<<"Maximum No.of Character in a filename:"<<res<<endl;

if((res=sysconf(_SC_OPEN_MAX))==-1) cout<<"System doesnot support\n"; else cout<<"Maximum Number of opened files per process:"<<res<<endl;

return 0; }

Unix Systems Programming and Compiler Design Manual

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

To Run the Program [root@localhost /]# g++ limit.cpp [root@localhost /]# ./a.out OUTPUT Number of Clock Tick:100 Maximum Number of Child Process that process can create:999 Maximum Path Length:4096 Maximum No.of Character in a filename:255 Maximum Number of opened files per process:1024

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 [root@localhost /]# gedit testmacro.cpp #define _POSIX_SOURCE #define _POSIX_C_SOURCE 199309L #include<iostream> #include<unistd.h> int main() { using namespace std; #ifdef _POSIX_JOB_CONTROL cout<<"System Supports Job Control feature"<<endl; #else cout<<"System doesnot support job control\n"; #endif

#ifdef _POSIX_SAVED_IDS cout<<"System Supports saved set-UID and saved set-GID"<<endl; #else cout<<"System doesnot support saved set-UID\n"; #endif #ifdef _POSIX_CHOWN_RESTRICTED cout<<"System Supports Change Ownership feature:"<<endl; #else cout<<"System doesnot support change Ownership feature\n"; #endif #ifdef _POSIX_NO_TRUNC cout<<"System Supports Path truncation option:"<<endl; #else cout<<"System doesnot support Path truncation \n"; #endif #ifdef _POSIX_VDISABLE cout<<"System Supports Disable Character for files:"<<endl; #else cout<<"System doesnot support Disable Characters \n"; #endif return 0; }

Unix Systems Programming and Compiler Design Manual

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

To Run the Program [root@localhost /]# g++ testmacro.cpp [root@localhost /]# ./a.out OUTPUT System Supports Job Control feature System Supports saved set-UID and saved set-GID System Supports Change Ownership feature System Supports Path truncation option System Supports Disable Character for files

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. [root@localhost /]# gedit lock.c #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <fcntl.h> #include <unistd.h>

int main(int argc, char *argv[]) { /* l_type l_whence l_start l_len l_pid*/ struct flock fl = {F_UNLCK, SEEK_SET, 0, 100, 0 }; int fd; int fsize,offset; char buf[50]; if ((fd = open(argv[1], O_RDWR)) == -1) { perror("Can't open file"); exit(1); } printf("File is Not Locked by any Process\n"); printf("Press Enter to Lock the File\n"); printf("---------------------------------\n"); getchar(); fl.l_type = F_WRLCK; fl.l_pid = getpid(); if (fcntl(fd, F_SETLK, &fl) == -1) { perror("Can't set Exculsive Lock"); exit(1); }

else if(fl.l_type!=F_UNLCK) { printf("File has been Exculsively Locked by process:%d\n",fl.l_pid); } else { printf("File is not Locked\n"); } printf("Press ENTER to Release lock:\n"); getchar(); fl.l_type = F_UNLCK; printf("File has been Unlocked\n"); fsize=lseek(fd,0,SEEK_END); offset=fsize-50;

Unix Systems Programming and Compiler Design Manual

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

lseek(fd,offset,SEEK_SET); read(fd,buf,50); printf("Last 50 Byte Content in the file is\n"); printf("====================================\n"); printf("%s\n",buf); return 0; } To Run Program Create a file, here we are creating a file with name demo with the following Content: Consider the last 100 bytes as a region. Write a C/C++ program to check whether the region is locked. [root@localhost /]# cc lock.c [root@localhost /]# ./a.out demo OUTPUT File is Not Locked by any Process Press Enter to Lock the File --------------------------------- File has been Exclusively Locked by process: 4087 Press Any Key to release lock: File has been Unlocked Last 50 Byte Content in the file is ==================================== /C++ program to check whether the region is locked

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. [root@localhost /]# gedit writer.c Writer Process (writer.c) #include <fcntl.h> #include <sys/stat.h> #include <sys/types.h> #include <unistd.h> int main() { int fd; char * myfifo = "/tmp/myfifo"; /* create the FIFO (named pipe) */ mkfifo(myfifo, 0666); printf("Run Reader process to read the FIFO File\n"); fd = open(myfifo, O_WRONLY); write(fd,"Hi", sizeof("Hi")); /* write "Hi" to the FIFO */ close(fd); unlink(myfifo); /* remove the FIFO */ return 0; }

[root@localhost /]# gedit reader.c Reader Process (reader.c) #include <fcntl.h> #include <sys/stat.h> #include <sys/types.h> #include <unistd.h> #define MAX_BUF 1024 int main() { int fd; char *myfifo = "/tmp/myfifo"; char buf[MAX_BUF]; /* open, read, and display the message from the FIFO */ fd = open(myfifo, O_RDONLY); read(fd, buf, MAX_BUF); printf("Received: %s\n", buf); close(fd); return 0; }

Unix Systems Programming and Compiler Design Manual

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

To Run the Program [root@localhost /]# cc writer.c [root@localhost /]# ./a.out Run Reader process to read the FIFO File After this Open New Terminal by pressing shift+ctrl+N or Go to File->Open Terminal [root@localhost /]# cc reader.c [root@localhost /]# ./a.out OUTPUT Received: Hi

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 [root@localhost /]# gedit env.c #include<stdio.h> #include<stdlib.h> int main() { int i; char **ptr; extern char **environ; printf("List of Environmental Variable\n"); printf("--------------------------------\n"); for (ptr = environ; *ptr != 0; ptr++) printf("%s\n", *ptr); exit(0); } To Run the Program [root@localhost /]# cc env.c [root@localhost /]# ./a.out OUTPUT List of Environmental Variable -------------------------------- SSH_AGENT_PID=3008 HOSTNAME=localhost.localdomain DESKTOP_STARTUP_ID= SHELL=/bin/bash TERM=xterm HISTSIZE=1000 KDE_NO_IPV6=1 GTK_RC_FILES=/etc/gtk/gtkrc:/root/.gtkrc-1.2-gnome2 WINDOWID=50331729 QTDIR=/usr/lib/qt-3.3 QTINC=/usr/lib/qt-3.3/include USER=root HOME=/root SHLVL=2 GNOME_DESKTOP_SESSION_ID=Default LOGNAME=root QTLIB=/usr/lib/qt-3.3/lib CVS_RSH=ssh

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 [root@localhost /]# gedit ln.cpp #include<iostream> #include<unistd.h> int main(int argc,char* argv[]) { using namespace std; if(argc!=3) { cout<<"Usage ./a.out sourcefile destination file\n"; return 0; } if(link(argv[1],argv[2])==-1) { cout<<"Can't Link\n"; return 1; } else { cout<<"Files have been Linked\n"; } return 0; } To Run the Program [root@localhost /]# g++ ln.cpp [root@localhost /]# ./a.out ln.cpp newfilename OUTPUT Files have been Linked [root@localhost /]# gedit newfilename (The Content of Source file Will be Copied to newfilename)

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. [root@localhost /]# gedit race.c #include<stdio.h> #include<stdlib.h> #include<error.h> static void charatatime(char *); int main(void) { pid_t pid; if ((pid = fork()) < 0) { printf("fork error"); } else if (pid == 0) { charatatime("output from child\n"); } else { charatatime("output from parent\n"); } exit(0); } static void charatatime(char *str) { char *ptr; int c; setbuf(stdout, NULL); /* set unbuffered */ for (ptr = str; (c = *ptr++) != 0; ) putc(c, stdout); }

To Run the Program [root@localhost /]# cc race.c [root@localhost /]# ./a.out OUTPUT output from child output from parent [root@localhost /]# ./a.out output from cohuitlpdu t from parent [root@localhost /]# ./a.out oouuttppuutt ffrroomm pcahrieldnt

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. [root@localhost /]# gedit zombie.c #include <stdlib.h> #include <sys/types.h> #include <unistd.h> int main () { pid_t child_pid; /* Create a child process. */ child_pid = fork (); if (child_pid == 0) { exit (0); /* This is the child process.Exit immediately. */ } else { sleep(3); /* This is the parent process. Sleep for a minute. */ system("ps -e -o pid,ppid,stat,cmd"); } return 0; } To Run the Program [root@localhost /]# cc zombie.c [root@localhost /]# ./a.out OUTPUT PID PPID STAT CMD 1 0 Ss init [5] 2 1 S [migration/0] 3 1 SN [ksoftirqd/0] 4 1 S [watchdog/0] 5 1 S [migration/1] 6 1 SN [ksoftirqd/1] 7 1 S [watchdog/1] 8 1 S [migration/2] 9 1 SN [ksoftirqd/2] 10 1 S [watchdog/2] 3087 3084 S gnome-pty-helper 3088 3084 Ss bash 3166 3088 S+ ./a.out 3167 3166 Z+ [a.out] <defunct> //Zombie Process 3168 3166 R+ ps -e -o pid,ppid,stat,cmd

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. [root@localhost /]# gedit avoidzombie.c #include<stdio.h> #include <sys/wait.h> #include<errno.h> #include<stdlib.h> int main() { pid_t pid; if ((pid = fork()) < 0) { printf("fork error"); } else if (pid == 0) { /* first child */ if ((pid = fork()) < 0) printf("fork error"); else if (pid > 0) exit(0); sleep(2); printf("second child, parent pid = %d\n", getppid()); exit(0); } if (waitpid(pid, NULL, 0) != pid) /* wait for first child */ printf("waitpid error"); exit(0); } To Run the Program [root@localhost /]# cc avoidzombie.c [root@localhost /]# ./a.out OUTPUT

Second Child,parent pid=1

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. [root@localhost /]# gedit system.c #include<sys/wait.h> #include<errno.h> #include<unistd.h> #include<stdio.h> #include<stdlib.h> int system1(const char *cmdstring) { pid_t pid; int status; if (cmdstring == NULL) return(1); if ((pid = fork()) < 0) { status = -1; } else if (pid == 0) { /* child */ execl("/bin/sh", "sh", "-c", cmdstring, (char *)0); _exit(127); /* execl error */ } else /* parent */ while (waitpid(pid, &status, 0) < 0) { if (errno != EINTR) status = -1; /* error other than EINTR from waitpid() */ break; } return(status); } int main() { int status; if ((status = system1("date")) < 0) printf("system() error"); if ((status = system1("who")) < 0) printf("system() error"); exit(0); }

Unix Systems Programming and Compiler Design Manual

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

To Run The Program [root@localhost /]# cc system.c [root@localhost /]# ./a.out OUTPUT Sun Dec 30 08:38:10 IST 2012 root pts/0 2012-12-30 08:34 (:0.0)

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. [root@localhost /]# gedit alarm.c #include<signal.h> #include<stdio.h> #include<unistd.h> #include<errno.h> void wakeup() {

printf("Hello\n"); printf("---------------------------------\n");

} int main() {

int i; struct sigaction action; action.sa_handler=wakeup; action.sa_flags=SA_RESTART; sigemptyset(&action.sa_mask);

if(sigaction(SIGALRM,&action,0)==-1) {

perror("sigaction"); } while(1) {

alarm(5); pause(); printf("Waiting For Alarm\n");

} return 0; } To Run the Program [root@localhost /]# cc alarm.c [root@localhost /]# ./a.out OUTPUT Hello --------------------------------- Waiting For Alarm Hello --------------------------------- (After 5 CPU Clockcycle) Waiting For Alarm Hello --------------------------------- (After 5 CPU Clockcycle) Waiting For Alarm

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”. [root@localhost /]# gedit sdd.c #include<stdio.h> #include<stdlib.h> #include<string.h> int parsecondition(char[],int ,char *,int); void gen(char[],char[],char[],int); int main() { int counter=0,stlen=0,elseflag=0; char stmt[60]; char strB[54]; char strS1[50]; char strS2[45]; printf("format of if statement\n example............\n"); printf("if(a<b)then(s,a);\n"); printf("if(a<b)then(s,a) else (s,b);\n\n"); printf("enter the statement\n"); scanf("%s",&stmt); stlen=strlen(stmt); counter=counter+2; counter=parsecondition(stmt,counter,strB,stlen); if(stmt[counter]==')') counter++; counter=counter+3; counter=parsecondition(stmt,counter,strS1,stlen); if(stmt[counter+1]==';') {

printf("\n parsing the input statement...\n"); gen(strB,strS1,strS2,elseflag); return 0;

} if(stmt[counter]==')') counter++; counter=counter+3; counter=parsecondition(stmt,counter,strS2,stlen); counter=counter+2; if(counter==stlen) { elseflag=1; printf("\n parsing the input statement"); gen(strB,strS1,strS2,elseflag); return 0; } return 0; }

Unix Systems Programming and Compiler Design Manual

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

int parsecondition(char input[],int cntr , char *dest, int totallen) {

int index=0,pos=0; while(input[cntr]!='(' && cntr<=totallen) cntr++; if(cntr>=totallen) return 0; index=cntr; while(input[cntr]!=')') cntr++; if(cntr>=totallen) return 0; while(index<=cntr) dest[pos++]=input[index++]; dest[pos]='\0'; return cntr;

} void gen(char B[],char S1[],char S2[],int elsepart) { int Bt=101,Bf=102,Sn=103;

printf("\n\t if %s goto %d",B,Bt); printf("\n\t goto %d",Bf); printf("\n %d:",Bt); printf("%s",S1);

if(!elsepart) printf("\n %d:",Bf); else { printf("\n\t goto %d",Sn); printf("\n %d : %s",Bf,S2); printf("\n %d:",Sn); } } To Run the Program [root@localhost /]# cc sdd.c [root@localhost /]# ./a.out

Unix Systems Programming and Compiler Design Manual

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

OUTPUT format of if statement example............ if(a<b)then(s,a); if(a<b)then(s,a) else (s,b); enter the statement if(a<b)then(s,a); parsing the input statement... if (a<b) goto 101 goto 102 101:(s,a) 102: [root@localhost /]# ./a.out format of if statement example............ if(a<b)then(s,a); if(a<b)then(s,a) else (s,b); enter the statement if(a<b)then(s,a)else(s,b); parsing the input statement if (a<b) goto 101 goto 102 101:(s,a) goto 103 102 : (s,b) 103:

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 [root@localhost /]# gedit parse.y %{ #include<ctype.h> char str[20]; int i=0; %} %token id %left '+''/''*''-' %%

E:S {infix_postfix(str);} S:S'+'T|S'-'T |T T:T'*'F|T'/'F |F F:id|'('S')' ;

%% #include<stdio.h> main() { printf("\n Enter the grammar:"); yyparse(); } yyerror() { printf("invalid"); } yylex() { char ch=' ';

while(ch!='\n') { ch=getchar(); str[i++]=ch; if(isalpha(ch)) return id; if(ch=='+'||ch=='*'||ch=='-'||ch=='/') return ch;} str[--i]='\0'; return(0); exit(0); }

void push(char stack[],int *top, char ch) { stack[++(*top)]=ch; }

Unix Systems Programming and Compiler Design Manual

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

char pop(char stack[],int *top) { return(stack[(*top)--]); } int prec(char ch) { switch(ch) { case '/' : case '*' : return 2; case '+' : case '-' : return 1; case '(' : return 0; default : return -1; } } void infix_postfix(char infix[]) { int top=-1,iptr=-1,pptr=-1; char postfix[20],stack[20],stksymb,cursymb; push(stack,&top,'\0'); while((cursymb=infix[++iptr])!='\0') { switch(cursymb) { case '(' : push(stack,&top,cursymb); break; case ')' : stksymb=pop(stack,&top); while(stksymb!='(') { postfix[++pptr]=stksymb; stksymb=pop(stack,&top); } break; case '*' : case '/' : case '+' : case '-' : while (prec(stack[top])>=prec(cursymb)) postfix[++pptr]=pop(stack,&top); push(stack,&top,cursymb); break; default : if(isalnum(cursymb)==0) { printf("error in input:"); exit(0); } postfix[++pptr]=cursymb; } } while(top!=-1) postfix[++pptr]=pop(stack,&top); printf("%s\n",postfix); }

Unix Systems Programming and Compiler Design Manual

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

To Run the Program [root@localhost /]# yacc –d parse.y [root@localhost /]# cc y.tab.c –ll [root@localhost /]#./a.out OUTPUT Enter the grammar:(a*b)+c-(d*e) ab*c+de*-

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

Unix Systems Programming and Compiler Design Manual

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

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


Recommended