Q1 ASSEMBLERS
Pass 1
#include<stdio.h>
#include<conio.h>
#include<string.h>
void main()
{
FILE *fp1,*fp2,*fp3,*fp4;
char label[10],opcode[10],operand[10],symbol[10],code[10];
char mnemonic[5],character,add[10],objectcode[10];
int flag,flag1,locctr,location,loc;
clrscr();
fp1=fopen("out.dat","r");
fp2=fopen("p2out.dat","w");
fp3=fopen("optab.dat","r");
fp4=fopen("symtab.dat","r");
if(fp1==NULL)
{
printf("The file cannot be open");
}
if(fp2==NULL)
{
printf("The file cannot be open");
}
if(fp3==NULL)
{
printf("The file cannot be open");
}
if(fp4==NULL)
{
printf("The file cannot be open");
}
fscanf(fp1,"%s%s%s",label,opcode,operand);
if(strcmp(opcode,"START")==0)
{
fprintf(fp2,"%s\t%s\t%s\n",label,opcode,operand);
fscanf(fp1,"%d%s%s%s",&locctr,label,opcode,operand);
}
while(strcmp(opcode,"END")!=0)
{
flag=0;
fscanf(fp3,"%s%s",code,mnemonic);
while(strcmp(code,"END")!=0)
{
if((strcmp(opcode,code)==0)&&(strcmp(mnemonic,"*"))!=0)
{
flag=1;
break;
}
fscanf(fp3,"%s%s",code,mnemonic);
}
if(flag==1)
{
flag1=0;
rewind(fp4);
while(!feof(fp4))
{
fscanf(fp4,"%s%d",symbol,&loc);
if(strcmp(symbol,operand)==0)
{
flag=1;
break;
}
}
if(flag1==1)
{
itoa(loc,add,10);
strcpy(objectcode,strcat(mnemonic,add));
}
}
else if(strcmp(opcode,"BYTE")==0 || strcmp(opcode,"WORD")==0)
{
if((operand[0]=='C')||(operand[0]=='X'))
{
character=operand[2];
itoa(character,add,16);
strcpy(objectcode,add);
}
else
{
itoa(atoi(operand),add,10);
strcpy(objectcode,add);
}
}
strcpy(objectcode,"\0");
fprintf(fp2,"%s\t%s\t%s\t%s\n",label,opcode,operand,locctr,objectcode);
fscanf(fp1,"%d%s%s%s",&locctr,label,opcode,operand);
}
fprintf(fp2,"%s\t%s\t%s\n",label,opcode,operand,locctr);
fclose(fp1);
fclose(fp2);
fclose(fp3);
fclose(fp4);
getch();
}
INPUT FILE:
Out.dat
** START 2000
2000 ** LDA FIVE
2003 ** STA ALPHA
2006 ** LDCH CHARZ
2009 ** STCH C1
2012 ALPHA RESW 1
2015 FIVE WORD 5
2018 CHARZ BYTE C’Z’
2019 C1 RESB 1
2020 ** END **
Optab.dat
START *
LDA 03
STA 0F
LDCH 53
STCH 57
END *
Symtab.dat
ALPHA 2012
FIVE 2015
CHARZ 2018
C1 2019
OUTPUT FILE:
P2out.dat
** START 2000
** LDA FIVE 2000 032015
** STA ALPHA 2003 0F2012
** LDCH CHARZ 2006 532018
** STCH C1 2009 572019
ALPHA RESW 1 2012
FIVE WORD 5 2015 5
CHARZ BYTE C'Z' 2018 5a
C1 RESB 1 2019
** END ** 2020
Pass 2
#include<stdio.h>
#include<conio.h>
#include<string.h>
void main()
{
char opcode[10],mne[3],operand[10],label[10],code[10];
int loc,start,len;
FILE *fp1,*fp2,*fp3,*fp4;
clrscr();
fp1=fopen("input.dat","r");
fp2=fopen("sym.dat","w");
fp3=fopen("out.dat","w");
fp4=fopen("optab.dat","r");
fscanf(fp1,"%s%s%s",label,opcode,operand);
if(strcmp(opcode,"START")==0)
{
start=atoi(operand);
loc=start;
fprintf(fp3,"\t%s\t%s\t%s\n",label,opcode,operand”);
fscanf(fp1,"%s%s%s",label,opcode,operand);
}
else
loc=0;
while(strcmp(opcode,"END")!=0)
{
fprintf(fp3,"%d\t",loc);
if(strcmp(label,"**")!=0)
fprintf(fp2,"%s\t%d\n",label,loc);
fscanf(fp4,"%s%s",code,mne);
while(strcmp(code,"END")!=0)
{
if(strcmp(opcode,code)==0)
{
loc+=3;
break;
}
fscanf(fp4,"%s%s",code,mne);
}
if(strcmp(opcode,"WORD")==0)
loc+=3;
else if(strcmp(opcode,"RESW")==0)
loc+=(3*(atoi(operand)));
else if(strcmp(opcode,"RESB")==0)
loc+=(atoi(operand));
else if(strcmp(opcode,"BYTE")==0)
++loc;
fprintf(fp3,"%s\t%s\t%s\n”,label,opcode,operand);
fscanf(fp1,"%s%s%s",label,opcode,operand);
}
fprintf(fp3,"%d\t%s\t%s\t%s\n",loc,label,opcode,operand);
len=loc-start;
printf("Length of the program is %d",len);
fclose(fp1);
fclose(fp2);
fclose(fp3);
fclose(fp4);
getch();
}
Q3(a) 17(a) SIGNALS
#include<sys/types.h>
#include<signal.h>
#include<stdio.h>
#define MAXLINE 20
static void sig_int(int);
int main()
{
char buf[MAXLINE];
pid_t pid;
int status;
if(signal(SIGINT,sig_int)==SIG_ERR)
perror("Signal error");
printf("%%");
while(fgets(buf,MAXLINE,stdin)!="")
{
buf[strlen(buf)-1]=0;
if((pid=fork())<0)
printf("Fork error");
else if(pid==0)
{
execlp(buf,buf,(char *)0);
printf("\nCould not execute %s",buf);
exit(127);
}
printf("%%");
}
exit(0);
}
void sig_int(int signo)
{
printf("\nInterrupt\n%%");
}
[student@localhost lij]$ cc sign.c
[student@localhost lij]$ ./a.out
%pwd
%/home/student/lij
%cal
April 2012
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
%sdfg
Could not execute sdfg
[1]+ Stopped ./a.out
Q3 (b) FILE EXIST OR NOT
if [ $# -gt 0 ]; then
FILE=$1
if [ -f $FILE ]; then
echo "file $FILE exists"
else
echo "file $FILE does not exists"
fi
else
echo "not enough arguments"
fi
OUTPUT
[student@localhost lij]$ sh exfile.sh dd
file dd exists
[student@localhost lij]$ sh exfile.sh da
file da does not exists
[student@localhost lij]$
Q4(a) MESSAGE QUEUE
[student@localhost lij]$ vi msgque.c
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<fcntl.h>
#include<sys/msg.h>
struct msgbuf
{
int type;
char mtext[100];
}m1;
int main()
{
int mqid,m,n;
pid_t childes;
mqid=msgget(IPC_PRIVATE,600/IPC_CREAT);
if(mqid==-1)
{
printf("\nError during message queue creation");
exit(1);
}
else
{
printf("\nMessage queue id:%d",mqid);
printf("\nEnter the message:\n");
n=read(0,m1.mtext,100);
m=msgsnd(mqid,&m1.mtext,100,0);
iif(n==-1)
{
printf("\nError during message send");
exit(1);
}
else
{
write(1,"Message send successfully",30);
if(childes==fork()==0)
{
m=msgrcv(mqid,&m1.mtext,100,0,0);
if(n==-1)
{
printf("\nError during message receiving");
exit(1);
}
else
{
write(1,"\nMessage received successfully",33);
write(1,"\nReceived message ",22);
write(1,&m1.mtext,100);
msgctl(mqid,IPC_RMID,NULL);
}
exit(0);
}
}
}
sleep(3);
exit(0);
}
[student@localhost lij]$ cc msgque.c
[student@localhost lij]$ ./a.out
Message queue id:163841
Enter the message:
Hai
Message send successfully
Message received successfully
Received message Hai
Q4 (b) .REVERSING OF NUMBER
echo "Program to reverse the digit"
echo "enter the numbers"
read n
rev=0
sd=0
while [ $n -gt 0 ]
do
sd=`expr $n % 10`
rev=`expr $rev \* 10 + $sd`
n=`expr $n / 10`
done
echo "The reverse digit is: $rev"
OUTPUT
[student@localhost lij]$ sh rev.sh
Program to reverse the digit
enter the numbers
1234
The reverse digit is: 4321
Q8 NAMED PIPE
FIFO
student@localhost lij]$ vi fifo.c
#include<stdio.h>
main()
{
int burst_time[20],no_process,i,j;
float avg_wait_time=0;
int tot_wait_time=0,wait_time=0;
char process_name[10][20];
printf("\nEnter the no:of process:");
scanf("%d",&no_process);
printf("\nEnter the process:\n");
for(i=0;i<no_process;i++)
{
scanf("%s",&process_name[i]);
}
printf("\nEnter the burst time for each process\n");
for(j=0;j<no_process;j++)
{
scanf("%d",&burst_time[j]);
}
printf("\nGrant chart\n");
for(i=0;i<=no_process;i++)
{
printf("%s\t",process_name[i]);
}
printf("\n%d\t",wait_time);
for(j=0;j<=no_process-1;j++)
{
wait_time=wait_time+burst_time[j];
printf("%d\t",wait_time);
if(j<no_process-1)
tot_wait_time=wait_time+tot_wait_time;
}
printf("\nTotal waiting time=%d",tot_wait_time);
avg_wait_time=(float)tot_wait_time/no_process;
printf("\nAverage waiting time=%f",avg_wait_time);
}
OUTPUT
[student@localhost lij]$ cc fifo.c
[student@localhost lij]$ ./a.out
Enter the no:of process:3
Enter the process:
p1
p2
p3
Enter the burst time for each process
2
3
5
Grant chart
p1 p2 p3
0 2 5 10
Total waiting time=7
Average waiting time=2.333333
Q8 UNNAMED PIPE
#include <stdio.h>
#define READ 0
#define WRITE 1
char *phrase = "Stuff this in your pipe and smoke it";
main ()
{
int fd[2], bytesRead;
char message [100];
pipe ( fd );
if ( fork ( ) == 0 )
{
close (fd[READ]);
write (fd[WRITE], phrase, strlen ( phrase) +1);
close (fd[WRITE]);
printf("Child: Wrote '%s' to pipe!\n", phrase);
}
else
{
close (fd[WRITE]);
bytesRead = read ( fd[READ], message, 100);
printf ( "Parent: Read %d bytes from pipe: %s\n", bytesRead, message);
close ( fd[READ]);
}
}
OUTPUT
[student@localhost lij]$ cc unnamepipe.c
[student@localhost lij]$ ./a.out
Child: Wrote 'Stuff this in your pipe and smoke it' to pipe!
Parent: Read 37 bytes from pipe: Stuff this in your pipe and smoke it
Q10 SHAERED MEMORY
#include<stdio.h>
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/shm.h>
#define shmsize 30
int main()
{
int shmid;
char *s,c;
shmid=shmget(51532,shmsize,IPC_CREAT|0666);
if(shmid<0)
{
perror("Shared memory creation error");
exit(1);
}
s=shmat(shmid,NULL,0);
printf("\nEnter the message to send:");
while((c=getc(stdin))!=EOF)
*s++=c;
*s='\0';
}
OUTPUT
[student@localhost lij]$ cc sm1.c
[student@localhost lij]$ ./a.out
Enter the message to send:
Hello
Q11(b). PALINDROME
clear
echo "Enter a string"
read a
b=`expr $a | wc -c`
b=`expr $b - 1`
echo "number of letter= $b"
while test $b -gt 0
do
e=`expr $a | cut -c $b`
d=$d$e
b=`expr $b - 1`
done
echo "the reversed string is:$d"
if test $a = $d
then
echo "It is a palindrome"
else
echo "It is not a palindrome"
fi
OUTPUT
[student@localhost lij]$ sh pali.sh
echo "Enter a string"
Enter a string
noon
number of letter= 4
the reversed string is:noon
It is a palindrome
Q12 SIMPLE TEXT EDITOR
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
void newf();
void view();
void saveas();
void modify();
void main()
{
int op;
clrscr();
do
{
printf("\nMENU\n");
printf("1.New\n");
printf("2.Open\n");
printf("3.Save As\n");
printf("4.Modify\n");
printf("5.Exit\n");
printf("Enter u'r choice: ");
scanf("%d",&op);
switch(op)
{
case 1:
newf();
break;
case 2:
view();
break;
case 3:
saveas();
break;
case 4:
modify();
break;
case 5:
exit(0);
default:
printf("\nWrong choice!!!");
break;
}
}while(op!=5);
}
void newf()
{
FILE *f;
char fname[20],c;
printf("\nEnter the Filename: ");
scanf("%s",fname);
printf("\nType the content and CTRL+Z to terminate:\n");
f=fopen(fname,"w");
rewind(f);
while((c=getchar())!=EOF)
{
putc(c,f);
}
fclose(f);
}
void view()
{
FILE *f;
char fname[20],c;
printf("\nEnter the name of the file:");
scanf("%s",&fname);
if(searchpath(fname))
{
f=fopen(fname,"r");
while((c=getc(f))!=EOF)
{
printf("%c",c);
}
}
else
printf("\nThe file %s does not exist",fname);
fclose(f);
}
void saveas()
{
FILE *f1,*f2;
char c,sou[20],des[20];
printf("\nEnter the Source file name: ");
scanf("%s",sou);
if(searchpath(sou))
{
printf("Enter the Destination file name: ");
scanf("%s",des);
f1=fopen(sou,"r");
f2=fopen(des,"w");
while((c=getc(f1))!=EOF)
{
putc(c,f2);
}
fclose(f1);
fclose(f2);
}
else
printf("\nFile does not exist");
getch();
}
void modify()
{
int ch1;
FILE *f1;
char c,*word,*sent,fname[20];
printf("Enter the filename to be modified: ");
scanf("%s",fname);
if(searchpath(fname))
{
printf("\n1.Character");
printf("\n2.Word");
printf("\n3.Sentence");
printf("\nEnter U'r choice: ");
scanf("%d",&ch1);
if(ch1==1)
{
f1=fopen(fname,"a+");
fseek(f1, 0L, SEEK_END);
printf("Enter the character and CTRL+Z to exit:\n ");
while((c=getchar())!=EOF)
{
putc(c,f1);
}
}
else if(ch1==2)
{
printf("Enter the word: ");
scanf("%s",word);
f1=fopen(fname,"a+");
fseek(f1, 0L, SEEK_END);
fputs(word,f1);
}
else
{
printf("Enter the sentence and CTRL+Z to exit: ");
f1=fopen(fname,"a+");
fseek(f1, 0L, SEEK_END);
while((c=getchar())!=EOF)
{
putc(c,f1);
}
}
}
else
printf("\nFilename does not exist");
fcloseall();
}
Q13(a) Print parent id processid groupid#include<stdio.h>#include<unistd.h>#include<stdlib.h>#include<sys/types.h>int main(){pid_t pid,ppid;gid_t gid;if((pid=getpid())<0){perror("Unable to get pid");}else{printf("The process id is:%d",pid);}if((ppid=getppid())<0){perror("Unable to get ppid");}else{printf("The process id is %d",ppid);}if((gid=getgid())<0){perror("Unable to get group id");}else{printf("The groupid is %d",gid);}return 0;}
Output[student@localhost btr]$ cc parent.c[student@localhost btr]$ ./a.outThe process id is:6166The process id is 5412The groupid is 100
14(d)occurences of a word
----------------------------------
TOTAL=0;
echo Enter the word
read y
for WORD in `cat $1 `
do
if [ "$WORD" = "$y" ]; then
TOTAL=` expr $TOTAL + 1 ` ;
fi ;
done ;
echo "THE TOTAL COUNT IS : $TOTAL "
[student@localhost lij]$ cat> ps
hai welcome hai wish
[9]+ Stopped cat > ps
[student@localhost lij]$ sh sa.sh ps
Enter the word
hai
THE TOTAL COUNT IS : 2
14(b)count no. of lines in multiple files
--------------------------------------
for file in $*
do
if [ ! -f $file ]
then
echo "$file not a file"
exit 1
fi
echo "Characters : $(cat $file | wc -c)"
echo "Words: $(cat $file | wc -w)"
done
OUTPUT
[student@localhost lij]$ sh ccn.sh
[student@localhost lij]$ cat > ss
hai
hai
hai word
hai hello
[3]+ Stopped cat > ss
[student@localhost lij]$ cat > ss1
ss
os
php
[4]+ Stopped cat > ss1
[student@localhost lij]$ sh ccn.sh ss ss1
Characters : 27
Words: 6
Characters : 10
Words: 3
14(c) count lines containing a word
------------------------------------
echo Enter the word to be searched
read word
echo Enter the file to be used
read filename
echo "The no. of lines containing the word $word are"
grep -c "$word" $filename
OUTPUT
[student@localhost lij]$ cat > hh
hai
hai
hello
hello
[2]+ Stopped cat > hh
[student@localhost lij]$ sh cl.sh
Enter the word to be searched
hai
Enter the file to be used
hh
The no. of lines containing the word hai are
2
[student@localhost lij]$
Q14(a) COUNT NO:OF WORDS,CHAR,LINES
file=$1
v=0
if [ $# -ne 1 ]
then
echo "$0 fileName"
exit 1
fi
if [ ! -f $file ]
then
echo "$file not a file"
exit 2
fi
echo "lines: $(cat $file | wc -l)"
echo "character: $(cat $file | wc -c)"
echo "Words: $(cat $file | wc -w)"
OUTPUT
[student@localhost lij]$ cat > jj
hai
hello
fine
[1]+ Stopped cat > jj
[student@localhost lij]$ sh wcl.sh jj
lines: 3
character: 15
Words: 3
Q16 (b) FILE SYS RELATED CALLS
[student@localhost lij]$ vi filesys.c
#include<sys/types.h>
#include<fcntl.h>
#include<unistd.h>
main()
{
int ch,fd,n,fdl;
char fname[20],buff[20],fnamel[20];
printf("\nMENU\n1.creat\n2.delete\n3.Read\n4.Copy\n5.Exit\n");
ab:
printf("\nEnter your choice:");
scanf("%d",&ch);
switch(ch)
{
case 1:
printf("\nEnter the file to be created:");
scanf("%s",fname);
if(!access(fname,F_OK))
{
printf("\nFile already created");
exit(1);
}
fd:
creat(fname,0777);
if(fd!=1)
printf("\nSuccessfully created");
goto ab;
case 2:
printf("\nThe name of the file to be deleted:");
scanf("%s",fname);
remove(fname);
printf("\nSuccessfully deleted");
goto ab;
case 3:
printf("\nEnter the name of file to read:");
scanf("%s",fname);
fd=open(fname,0);
if(fd==-1)
{
perror("open error");
exit(1);
}
while((n=read(fd,buff,1))>0)
write(1,buff,n);
close(fd);
goto ab;
case 4:
printf("\nEnter the name of the file to copy:");
scanf("%s",fname);
printf("\nEnter the file to which it is coppied:");
scanf("%s",fnamel);
fd=open(fname,0);
fdl=creat(fnamel,0777);
while((n=read(fd,buff,1))>0)
write(fdl,buff,n);
close(fd);
close(fdl);
printf("\nSuccessfully coppied");
goto ab;
case 5:
break;
}
}
[student@localhost lij]$ cc filesys.c
[student@localhost lij]$ ./a.out
MENU
1.creat
2.delete
3.Read
4.Copy
5.Exit
Enter your choice:1
Enter the file to be created:aa
Successfully created
Enter your choice:5
[student@localhost lij]$ cat > bb
Lij
[1]+ Stopped cat > bb
[student@localhost lij]$ ./a.out
MENU
1.creat
2.delete
3.Read
4.Copy
5.Exit
Enter your choice:3
Enter the name of file to read:bb
Lij
Enter your choice:1
Enter the file to be created:cc
Successfully created
Enter your choice:4
Enter the name of the file to copy:bb
Enter the file to which it is coppied:cc
Successfully coppied
Enter your choice:2
The name of the file to be deleted:bb
Successfully deleted
Enter your choice:5
Q17 (b) .SIGNAL() & KILL()
#include <stdio.h>
#include <signal.h>
void sighup();
void sigint();
void sigquit();
main()
{
int pid;
if ((pid = fork()) < 0)
{
perror("fork");
exit(1);
}
if (pid == 0)
{
signal(SIGHUP,sighup);
signal(SIGINT,sigint);
signal(SIGQUIT, sigquit);
for(;;);
}
else
{
printf("\nPARENT: sending SIGHUP\n\n");
kill(pid,SIGHUP);
sleep(3);
printf("\nPARENT: sending SIGINT\n\n");
kill(pid,SIGINT);
sleep(3);
printf("\nPARENT: sending SIGQUIT\n\n");
kill(pid,SIGQUIT);
sleep(3);
}
}
void sighup()
{ signal(SIGHUP,sighup);
printf("CHILD: I have received a SIGHUP\n");
}
void sigint()
{ signal(SIGINT,sigint);
printf("CHILD: I have received a SIGINT\n");
}
void sigquit()
{ printf("My DADDY has Killed me!!!\n");
exit(0);
}
OUTPUT
[student@localhost lij]$ cc signalkill.c
[student@localhost lij]$ ./a.out
PARENT: sending SIGHUP
CHILD: I have received a SIGHUP
PARENT: sending SIGINT
CHILD: I have received a SIGINT
PARENT: sending SIGQUIT
My DADDY has Killed me!!
Q17(a)SIGNALS
#include<sys/types.h>
#include<signal.h>
#include<stdio.h>
#define MAXLINE 20
static void sig_int(int);
int main()
{
char buf[MAXLINE];
pid_t pid;
int status;
if(signal(SIGINT,sig_int)==SIG_ERR)
perror("Signal error");
printf("%%");
while(fgets(buf,MAXLINE,stdin)!="")
{
buf[strlen(buf)-1]=0;
if((pid=fork())<0)
printf("Fork error");
else if(pid==0)
{
execlp(buf,buf,(char *)0);
printf("\nCould not execute %s",buf);
exit(127);
}
printf("%%");
}
exit(0);
}
void sig_int(int signo)
{
printf("\nInterrupt\n%%");
}
[student@localhost lij]$ cc sign.c
[student@localhost lij]$ ./a.out
%pwd
%/home/student/lij
%cal
April 2012
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
%sdfg
Could not execute sdfg
[1]+ Stopped ./a.out
Q18 (a) SIGALRM
#include<stdio.h>
#include<signal.h>
volatile int breakflag=5;
void handle(int sig)
{
printf("Hello\n");
--breakflag;
alarm(1);
}
int main()
{
signal(SIGALRM,handle);
alarm(1);
while(breakflag)
{
sleep(1);
}
printf("done\n");
return 0;
}
OUTPUT
[student@localhost lij]$ cc sig.c
[student@localhost lij]$ ./a.out
Hello
Hello
Hello
Hello
Hello
Done
18(b)Two way comunication
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
int main()
{
int pfds[2],plfds[2];
char buf[10];
int i;
pipe(pfds);
pipe(plfds);
if(fork()==0)
{
close(pfds[0]);
close(plfds[1]);
write(pfds[1],"test",5);
read(plfds[0],buf,5);
write(1,buf,5);
}
else
{
close(pfds[1]);
close(plfds[0]);
read(pfds[0],buf,5);
for(i=0;i<4;i++)
buf[i]=toupper(buf[i]);
write(plfds[1],buf,5);
}
}
OUTPUT
"childs.c" 29L, 381C written
[student@localhost ni]$ cc childs.c
[student@localhost ni]$ ./a.out
[student@localhost ni]$ TEST
[student@localhost ni]$
19(a)MSG QUE
19(b) TRANS
echo -n "Enter filename"
read filename
if [ ! -f $filename ]; then
echo "Filename $filename doesn't not exist"
exit 1
fi
tr '[A-Z]' '[a-z]' < $filename
OUTPUT
[student@localhost geet]$ cat> gg
SFDGhjkjhj
[2]+ Stopped cat > gg
[student@localhost geet]$ sh trans.sh
Enter filenamegg
sfdghjkjhj
.
Q20(a) PRODUCER CONSUMER PROBLEM
FIFO : PRODUCER – CONSUMERVI TICK.C#include<stdio.h>#include<stdlib.h>#include<errno.h>#include<string.h>#include<fcntl.h>#include<sys/types.h>#include<sys/stat.h>#include<unistd.h>#define FIFO_NAME "XYZ"main(){char s[300];int num,fd;mknod(FIFO_NAME, S_IFIFO | 0666, 0);printf("Waiting for writers......\n");fd=open(FIFO_NAME, O_RDONLY);printf("got a writer : \n");do{if((num= read(fd, s, 300))== -1)perror("read");else{s[num]='\0';printf("tick : read %d bytes : \" %s\" \n", num,s);}}while(num>0);}…………………………………………………………………………………[student@localhost vp]$ cc tick.c
[student@localhost vp]$ ./a.out
Waiting for writers......got a writer :tick : read 2 bytes : " ds"tick : read 3 bytes : " jhf"tick : read 2 bytes : " hh"tick : read 4 bytes : " fghg"tick : read 5 bytes : " hello"
VI SPEAK.C#include<stdio.h>#include<stdlib.h>#include<errno.h>#include<string.h>#include<fcntl.h>#include<sys/types.h>#include<sys/stat.h>#include<unistd.h>#define FIFO_NAME "XYZ"main(){char s[300];int num,fd;mknod(FIFO_NAME, S_IFIFO | 0666, 0);printf("Waiting for readers......\n");fd=open(FIFO_NAME, O_WRONLY);printf("got a reader-type some stuff\n");while(gets(s), !feof(stdin)){if((num= write(fd, s, strlen(s)))==-1)perror("write");elseprintf("speak:wrote %d bytes\n", num);}}………………………………………………………………………[student@localhost vp]$ cc speak.c[student@localhost vp]$ ./a.outWaiting for readers......got a reader-type some stuffdsspeak:wrote 2 bytesjhfspeak:wrote 3 byteshhspeak:wrote 2 bytesfghgspeak:wrote 4 bytes
20(b)LS COMMAND
------------
#include<stdio.h>
#include<string.h>
#include<unistd.h>
#include<dirent.h>
int main()
{
DIR *dirp;
struct dirent *dp;
char dname[10];
printf("Enter the directory name");
scanf("%s",dname);
dirp=opendir(dname);
if(dirp==NULL)
printf("error");
else
for(dp=readdir(dirp);dp!=NULL;dp=readdir(dirp))
printf("%s\n",dp->dname);
}
OUTPUT
[student@localhost lij]$ mkdir aps
[student@localhost lij]$ cd aps
[student@localhost aps]$ cat > ap
hai
hello
[1]+ Stopped cat > ap
[student@localhost aps]$ cd\
>
[student@localhost ~]$ cd lij
[student@localhost lij]$ cc ls.c
[student@localhost lij]$ ./a.out
Enter the directory name aps
ap
..
.
Q11(a)MERGE SORT
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/wait.h>
#include<stdlib.h>
#include<stdio.h>
#define MAXLINE 1000
struct mymesg
{
long mtype;
int a[4];
};
void Merge(int a[],int mer[],int ct)
{
if(ct==0)
{
ct+=4;
for(int i=1;i<=ct;i++)
mer[i]=a[i];
}
else
{
for(int i=1;i<=4;i++)
{
int j=1;
while(a[i]>mer[j]&&j<=ct)j++;
if(j>ct)
mer[j]=a[i];
else
{
for(int k=ct;k>=j;k--)
mer[k+1]=mer[k];
mer[j]=a[i];
}
ct++;
}
}
}
int main()
{
int n,pid,mpid,sum,b[17],mer[17],num=16;
mpid=msgget(12,0666|IPC_CREAT);
system("clear");
printf("Elements are...
");
for(int i=1;i<=num;i++)
{
b[i]=rand()%150;
printf("%d ",b[i]);
}
printf("
");
int i,ct=1,gmax;n=4;sum=0;gmax=4;
for(i=1;i<=n;i++)
{
struct mymesg ptr;
ptr.mtype=1;
pid=fork();
if (pid>0)
{
int k=0;
printf("Group %d: ",i);
for(int j=ct;j<=ct+gmax-1;j++)
{
ptr.a[++k]=b[j];
printf("%d ",ptr.a[k]);
}
printf("
");
msgsnd(mpid,&ptr,MAXLINE,IPC_NOWAIT);
waitpid(pid,NULL,0);
msgrcv(mpid,&ptr,MAXLINE,0,IPC_NOWAIT);
printf("Sorted Sub-Group %d: ",i);
for(int j=1;j<=gmax;j++)
printf("%d ",ptr.a[j]);
printf("
");
Merge(ptr.a,mer,ct-1);
if(ct==num+1-gmax)
break;
ct+=gmax;
continue;
}
else
{
msgrcv(mpid,&ptr,MAXLINE,0,IPC_NOWAIT);
for(int j=1;j<=gmax;j++)
{
for(int k=1;k<=gmax-j;k++)
{
if(ptr.a[k]>ptr.a[k+1])
{
int t=ptr.a[k+1];
ptr.a[k+1]=ptr.a[k];
ptr.a[k]=t;
}
}
}
ptr.mtype=2;
msgsnd(mpid,&ptr,MAXLINE,IPC_NOWAIT);
exit(0);
}
}
printf("Merged Sorted Group....
");
for(int i=1;i<=num;i++)
printf("%d ",mer[i]);
printf("
");
return 0;
}
BIGGEST NUMBER
#!/bin/bash
echo Enter no of items
read n
echo Enter the numbers
read -a ARRAY
max=0
count=${#ARRAY[@]}
for x in ${ARRAY[@]}
do
if [ $x -gt $max ]
then
max=$x
fi
done
echo The biggest number is : $max
LINES REPEATED MORE THAN THRICE
echo Enter filename
read filename
while read line
do
uc=$(echo $line | tr [a-z] [A-Z] | tr -d ' ')
if [ $(grep -i "$uc" $filename | wc -l) -gt 3 ];then
echo $uc
fi
done< $filename | sort | uniq
Quick sort
#!/bin/bash
printnumbers()
{
echo ${ARRAY[*]}
}
sortnumbers()
{
local array=( `echo "$@"` )
local -a l
local -a g
local -a e
local x=
if [ ${#array[@]} -lt 2 ]; then
echo -n ${array[@]}
else
local pivot=${array[0]}
for x in ${array[@]}
do
if [ $x -lt $pivot ]
then
l=( ${l[@]} $x )
elif [ $x -gt $pivot ]
then
g=( ${g[@]} $x )
else
e=(${e[@]} $x)
fi
done
echo "`sortnumbers "${l[@]}"` ${e[@]} `sortnumbers "${g[@]}"`"
fi
}
clear
echo "Enter Numbers to be Sorted : "
read -a ARRAY
count=${#ARRAY[@]}
echo "--------------------------------------------------------------"
echo "Numbers Before Sort:"
printnumbers
echo "Numbers After Sort: "
sortnumbers "${ARRAY[@]}"
echo "--------------------------------------------------------------"