Thanks to visit codestin.com
Credit goes to www.scribd.com

0% found this document useful (0 votes)
18 views44 pages

somyaOS File

Os file for college

Uploaded by

bohararaj498
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
18 views44 pages

somyaOS File

Os file for college

Uploaded by

bohararaj498
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 44

COLLEGE OF TECHNOLOGY AND ENGINEERING, MPUAT, UDAIPUR (RAJ.

)
Name-Somya Soni Class - B.Tech, III yr, CSE Sem-VI Batch - B

Subject – Operating Systems (CS-361)

INDEX
S.NO. PROGRAM NAME DATE SIGNATURE REMARK
Write a Program to display a file page wise
1. assuming a page has 10 lines and each line 24/01/2024
has 80 characters
Write a Program which converts all the small
2. case letters in a file into appropriate capital 24/01/2024
letters.
Write a program to print the details of the
3. 29/01/2024
system (use uname sys call)
Write a program which will print the list of
4. environment variable and also print the value 29/01/2024
of the PATH system variable
Write a program to print current (soft) limit
5. 05/02/2024
and maximum (Hard) limits of all resources
Write a program with an exit handler that
6. 05/02/2024
outputs CPU usage.
Write a program that prints it’s & it’s parent’s
7. 07/02/2024
process ID.
Write a program that prints out various user
8. 07/02/2024
& group ID’s.
Write a program which uses fork to create a
9. child process& then parent & child print their 12/02/2024
respective process ID’s
Write a program that creates a chain of n
10. processes, where n is a command line 12/02/2024
argument.
Write a program that creates a fan of n
11. processes where n is passed as a command 14/02/2024
line argument.
Write a program to show that same opened
12. file can be shared by both parent and child 14/02/2024
processes
Write a program that creates a child process
13. 19/02/2024
to run ls – l
Write a program to create a zombie child and
14. 19/02/2024
find its status using system (ps) command
19.
COLLEGE OF TECHNOLOGY AND ENGINEERING, MPUAT, UDAIPUR (RAJ.)
Name-Somya Soni Class - B.Tech, III yr, CSE Sem-VI Batch - B

Subject – Operating Systems (CS-361)

15. Write a program to copy a file. 21/02/2024

Write a program for which output is


16. automatically directed to a named file rather 21/02/2024
than on to the console
Write a program that redirects standards
output to the file my.file (or Write a program
17. 26/02/2024
that do the following operation cat XYZ >
myfile). using dup2 rather than dup
Write a program to create an empty directory
18. 28/02/2024
using system calls
Write a program to remove a directory using
19. 04/03/2024
system call
Write a program to output current working
20. 04/03/2024
directory

21. Write a program to list files in a directory. 06/03/2024


Write a program that returns true if a given
22. 11/03/2024
file is a directory & false otherwise.
Write a program that can display the type of
23. 11/03/2024
a given file like regular, directory etc.
Write a program to display the permission of
24. 01/04/2024
a given file
Write a program to execute the equivalent of
25. 03/04/2024
ls –l | sort –n +4
Write a program to handle SIGUSR1 and
26. 08/04/2024
SIGUSR2 signal
Write a program which suspends itself till it
27. 10/04/2024
receives a SIGALARM signal
Write a program which prints the second’s
28. part of current time whenever the SIGALRM 10/04/2024
signal is received by the program.
Write a Program to print the entries of
29. 15/04/2024
passwd file for a given user name or user ID
Write a program to print the details of the
30. 15/04/2024
system
Write a program which Reads what is written
31. to a named pipe & writes it to standard 22/04/2024
output
Write an informative message to a named
32. 22/04/2024
pipe
COLLEGE OF TECHNOLOGY AND ENGINEERING, MPUAT, UDAIPUR (RAJ.)
Name-Somya Soni Class - B.Tech, III yr, CSE Sem-VI Batch - B

Subject – Operating Systems (CS-361)

PROGRAM - 1
OBJECTIVE – Write a Program to display a file page wise assuming a page has 10
lines and each line has 80 characters.

CODE –
#include<stdio.h>
#include<stdlib.h>

int main(int argc, char *argv[]) {


char buff[10][80];
int i,j;
char k;
FILE *fp;
if(argc!=2)
{
fprintf(stderr,"Usage: ./a.out file name\n");
exit(1);
}
fp=fopen(argv[1],"r");
while(!feof(fp)){
for(i=0;i<10;i++)
for(j=0;j<80;j++)
buff[i][j]='\0';
for(i=0;i<10;i++)
fgets(buff[i],80,fp);
for(i=0;i<10;i++)
printf("%s",buff[i]);
scanf("%c", &k);
}
fclose(fp);
}
OUTPUT :-
COLLEGE OF TECHNOLOGY AND ENGINEERING, MPUAT, UDAIPUR (RAJ.)
Name-Somya Soni Class - B.Tech, III yr, CSE Sem-VI Batch - B

Subject – Operating Systems (CS-361)

PROGRAM - 2

OBJECTIVE – Write a Program which converts all the small case letters in a file
into appropriate capital letters.

CODE –

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {


FILE *fp, *ft;
char ch;

if (argc != 2) {
fprintf(stderr, "Usage: %s <file name>\n", argv[0]);
exit(1);
}

fp = fopen(argv[1], "r");
if (fp == NULL) {
printf("Can't open file.\n");
exit(1);
}

ft = fopen("temp", "w");
if (ft == NULL) {
printf("Can't create temporary file.\n");
exit(1);
}

while ((ch = fgetc(fp)) != EOF) {


if (ch >= 'a' && ch <= 'z')
ch = ch - 'a' + 'A';
fputc(ch, ft);
}

fclose(fp);
fclose(ft);

fp = fopen(argv[1], "w");
if (fp == NULL) {
printf("Can't open file for writing.\n");
exit(1);
}
COLLEGE OF TECHNOLOGY AND ENGINEERING, MPUAT, UDAIPUR (RAJ.)
Name-Somya Soni Class - B.Tech, III yr, CSE Sem-VI Batch - B

Subject – Operating Systems (CS-361)

ft = fopen("temp", "r");
if (ft == NULL) {
printf("Can't open temporary file.\n");
exit(1);
}

while ((ch = fgetc(ft)) != EOF) {


fputc(ch, fp);
}

fclose(fp);
fclose(ft);

printf("Conversion successful.\n");

return 0;
}

OUTPUT :-
COLLEGE OF TECHNOLOGY AND ENGINEERING, MPUAT, UDAIPUR (RAJ.)
Name-Somya Soni Class - B.Tech, III yr, CSE Sem-VI Batch - B

Subject – Operating Systems (CS-361)

PROGRAM - 3

OBJECTIVE – Write a program to print the details of the system (use uname sys
call)

CODE –

#include <stdio.h>
#include <sys/utsname.h>

int main() {
struct utsname u;

if (uname(&u) != 0) {
fprintf(stderr, "Uname Error\n");
return 1;
}

printf("System Name: %s\n", u.sysname);


printf("Node Name: %s\n", u.nodename);
printf("Release: %s\n", u.release);
printf("Version: %s\n", u.version);
printf("Machine: %s\n", u.machine);

return 0;
}

OUTPUT :-
COLLEGE OF TECHNOLOGY AND ENGINEERING, MPUAT, UDAIPUR (RAJ.)
Name-Somya Soni Class - B.Tech, III yr, CSE Sem-VI Batch - B

Subject – Operating Systems (CS-361)

PROGRAM - 4

OBJECTIVE – Write a program which will print the list of environment variable
and also print the value of the PATH system variable.

CODE –

//To print all environment variables

#include<stdio.h>
#include<stdlib.h>

extern char **environ;


//the external variable environ points to the process environment list when the process begins
executing. Do man environ

int main(void)
{
int i;
char *path;
printf("The environment list follows: \n");
for(i=0;environ[i] != NULL; i++)
printf("environ[%d]: %s\n", i, environ[i]);

if ((path =getenv("PATH")) == NULL) // do man getenv


printf("PATH environment variable not set\n");
else
printf("The value of PATH variable = %s\n", path);
return 0;
}

OUTPUT :-
COLLEGE OF TECHNOLOGY AND ENGINEERING, MPUAT, UDAIPUR (RAJ.)
Name-Somya Soni Class - B.Tech, III yr, CSE Sem-VI Batch - B

Subject – Operating Systems (CS-361)


COLLEGE OF TECHNOLOGY AND ENGINEERING, MPUAT, UDAIPUR (RAJ.)
Name-Somya Soni Class - B.Tech, III yr, CSE Sem-VI Batch - B

Subject – Operating Systems (CS-361)

PROGRAM - 5

OBJECTIVE – Write a program to print current (soft) limit and maximum (Hard)
limits of all resources

CODE –

#include <stdio.h>
#include <stdlib.h>
#include <sys/resource.h>

int main() {
struct rlimit rl;
int i;

printf("\nResource Name\tCurrent Limit\tMax Limit\n");

for (i = 0; i <= RLIMIT_NLIMITS; i++) {


if (getrlimit(i, &rl) < 0) {
printf("Error in getrlimit\n");
exit(1);
}

switch (i) {
case RLIMIT_CPU:
printf("RLIMIT_CPU\t%ld\t\t%ld\n", rl.rlim_cur, rl.rlim_max);
break;
case RLIMIT_DATA:
printf("RLIMIT_DATA\t%ld\t\t%ld\n", rl.rlim_cur, rl.rlim_max);
break;
case RLIMIT_FSIZE:
printf("RLIMIT_FSIZE\t%ld\t\t%ld\n", rl.rlim_cur, rl.rlim_max);
break;
case RLIMIT_MEMLOCK:
printf("RLIMIT_MEMLOCK\t%ld\t\t%ld\n", rl.rlim_cur, rl.rlim_max);
break;
case RLIMIT_NOFILE:
printf("RLIMIT_NOFILE\t%ld\t\t%ld\n", rl.rlim_cur, rl.rlim_max);
break;
case RLIMIT_NPROC:
printf("RLIMIT_NPROC\t%ld\t\t%ld\n", rl.rlim_cur, rl.rlim_max);
break;
case RLIMIT_RSS:
printf("RLIMIT_RSS\t%ld\t\t%ld\n", rl.rlim_cur, rl.rlim_max);
break;
case RLIMIT_STACK:
COLLEGE OF TECHNOLOGY AND ENGINEERING, MPUAT, UDAIPUR (RAJ.)
Name-Somya Soni Class - B.Tech, III yr, CSE Sem-VI Batch - B

Subject – Operating Systems (CS-361)

printf("RLIMIT_STACK\t%ld\t\t%ld\n", rl.rlim_cur, rl.rlim_max);


break;
case RLIMIT_LOCKS:
printf("RLIMIT_LOCKS\t%ld\t\t%ld\n", rl.rlim_cur, rl.rlim_max);
break;
default:
break;
}
}

return 0;
}

OUTPUT :
-
COLLEGE OF TECHNOLOGY AND ENGINEERING, MPUAT, UDAIPUR (RAJ.)
Name-Somya Soni Class - B.Tech, III yr, CSE Sem-VI Batch - B

Subject – Operating Systems (CS-361)

PROGRAM - 6

OBJECTIVE – Write a program with an exit handler that outputs CPU usage.

CODE –

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/times.h>
#include <time.h>

static void showtimes(void) {


time_t time1, time2;
time_t time_dif;
time1 = time(NULL); // man time,
// time(NULL) returns current time in seconds
printf("time1 : %ld", time1);
sleep(5); // man sleep
time2 = time(NULL);
printf("\ntime2 : %ld", time2);
time_dif = difftime(time2, time1); // man difftime
printf("\nThe program slept for: %ld seconds\n", time_dif);
}

int main(void) {
if (atexit(showtimes)) // man atexit
{
fprintf(stderr, "Failed to install showtimes exit handler\n");
return 1;
}
/* rest of main program goes here */
return 0;
}

OUTPUT :-
COLLEGE OF TECHNOLOGY AND ENGINEERING, MPUAT, UDAIPUR (RAJ.)
Name-Somya Soni Class - B.Tech, III yr, CSE Sem-VI Batch - B

Subject – Operating Systems (CS-361)

PROGRAM - 7

OBJECTIVE – Write a program that prints it’s & it’s parent’s process ID.

CODE –

#include<stdio.h>
#include <unistd.h>
int main (void)
{
printf("I am process %ld\n", (long)getpid()); //man getpid
printf("My parent is %ld\n", (long)getppid());
return 0;
}

OUTPUT :-
COLLEGE OF TECHNOLOGY AND ENGINEERING, MPUAT, UDAIPUR (RAJ.)
Name-Somya Soni Class - B.Tech, III yr, CSE Sem-VI Batch - B

Subject – Operating Systems (CS-361)

PROGRAM - 8

OBJECTIVE – Write a program that prints out various user & group ID’s.

CODE –

#include <stdio.h>
#include <unistd.h>

int main(void) {
// man getuid, man getgid
printf("My real user ID is %5ld\n", (long)getuid());
printf("My effective user ID is %5ld\n", (long)geteuid());
printf("My real group ID is %5ld\n", (long)getgid());
printf("My effective group ID is %5ld\n", (long)getegid());
return 0;
}

OUTPUT :-
COLLEGE OF TECHNOLOGY AND ENGINEERING, MPUAT, UDAIPUR (RAJ.)
Name-Somya Soni Class - B.Tech, III yr, CSE Sem-VI Batch - B

Subject – Operating Systems (CS-361)

PROGRAM - 9

OBJECTIVE – Write a program which uses fork to create a child process& then
parent & child print their respective process ID’s

CODE –

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>

int main(void) {
pid_t childpid;
childpid = fork();
if (childpid == -1) {
perror("Failed to fork");
return 1;
}
if (childpid == 0) {
/* child code */
printf("I am child %ld\n", (long)getpid());
} else {
/* parent code */
printf("I am parent %ld\n", (long)getpid());
}
return 0;
}

OUTPUT :-
COLLEGE OF TECHNOLOGY AND ENGINEERING, MPUAT, UDAIPUR (RAJ.)
Name-Somya Soni Class - B.Tech, III yr, CSE Sem-VI Batch - B

Subject – Operating Systems (CS-361)

PROGRAM - 10
OBJECTIVE – Write a program that creates a chain of n processes, where n is a
command line argument.

CODE –
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(int argc, char *argv[]) {


pid_t childpid = 0;
int i, n;

if (argc != 2) {
fprintf(stderr, "Usage: %s processes\n", argv[0]);
return 1;
}
n = atoi(argv[1]);

for (i = 1; i < n; i++) {


if ((childpid = fork()) == -1) {
perror("Failed to fork");
return 1;
} else if (childpid == 0) {
/* Child process */
break;
}
}

fprintf(stderr, "i:%d process ID:%ld parent ID:%ld child ID:%ld\n",


i, (long)getpid(), (long)getppid(), (long)childpid);

return 0;
}

OUTPUT :-
COLLEGE OF TECHNOLOGY AND ENGINEERING, MPUAT, UDAIPUR (RAJ.)
Name-Somya Soni Class - B.Tech, III yr, CSE Sem-VI Batch - B

Subject – Operating Systems (CS-361)

PROGRAM - 11

OBJECTIVE – Write a program that creates a fan of n processes where n is passed


as a command line argument.

CODE –

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(int argc, char *argv[]) {


pid_t childpid = 0;
int i, n;

if (argc != 2) {
fprintf(stderr, "Usage: %s processes\n", argv[0]);
return 1;
}

n = atoi(argv[1]);

for (i = 1; i < n; i++) {


if ((childpid = fork()) <= 0)
break;
}

fprintf(stderr, "i:%d process ID:%ld parent ID:%ld child ID:%ld\n",


i, (long)getpid(), (long)getppid(), (long)childpid);

return 0;
}

OUTPUT :-
COLLEGE OF TECHNOLOGY AND ENGINEERING, MPUAT, UDAIPUR (RAJ.)
Name-Somya Soni Class - B.Tech, III yr, CSE Sem-VI Batch - B

Subject – Operating Systems (CS-361)

PROGRAM - 12

OBJECTIVE – Write a program to show that same opened file can be shared by
both parent and child processes.

CODE –

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>

int main() {
FILE *fp;
int fd;
char ch;

fp = fopen("test", "w");
if (fp == NULL) {
perror("Error opening file");
exit(1);
}

fprintf(fp, "%s\n", "This line is written by PARENT PROCESS");


fflush(NULL);
fd = fork();

if (fd < 0) {
perror("Fork Error");
exit(1);
}

if (fd == 0) {
fprintf(fp, "%s", "This line is written by CHILD PROCESS\n");
fclose(fp);
fp = fopen("test", "r");
if (fp == NULL) {
perror("Error opening file");
exit(1);
}
while ((ch = getc(fp)) != EOF)
printf("%c", ch);
}

if (fd > 0) {
// man 2 wait
COLLEGE OF TECHNOLOGY AND ENGINEERING, MPUAT, UDAIPUR (RAJ.)
Name-Somya Soni Class - B.Tech, III yr, CSE Sem-VI Batch - B

Subject – Operating Systems (CS-361)

if (fd != wait(NULL)) {
perror("Parent failed to wait due to signal or error");
return 1;
}
}

fclose(fp);
return 0;
}

OUTPUT :-
COLLEGE OF TECHNOLOGY AND ENGINEERING, MPUAT, UDAIPUR (RAJ.)
Name-Somya Soni Class - B.Tech, III yr, CSE Sem-VI Batch - B

Subject – Operating Systems (CS-361)

PROGRAM - 13
OBJECTIVE – Write a program that creates a child process to run ls – l

CODE –
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>

int main(void) {
pid_t childpid;
childpid = fork();

if (childpid == -1) {
perror("Failed to fork");
return 1;
}

if (childpid == 0) {
/* child code */
execl("/bin/ls", "ls", "-l", NULL); // man 2 exec
perror("Child failed to exec ls");
return 1;
}

if (childpid != wait(NULL)) {
/* parent code */
perror("Parent failed to wait due to signal or error");
return 1;
}

return 0;
}

OUTPUT :-
COLLEGE OF TECHNOLOGY AND ENGINEERING, MPUAT, UDAIPUR (RAJ.)
Name-Somya Soni Class - B.Tech, III yr, CSE Sem-VI Batch - B

Subject – Operating Systems (CS-361)

PROGRAM - 14

OBJECTIVE – Write a program to create a zombie child and find its status using
system (ps) command.

CODE –

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>

int main() {
int fd;
if ((fd = fork()) < 0) {
printf("Error in creating child\n");
exit(1);
}
if (fd == 0) {
kill(getpid(), SIGKILL);
} else {
sleep(2);
}
system("ps -f");
return 0;
}

OUTPUT :-
COLLEGE OF TECHNOLOGY AND ENGINEERING, MPUAT, UDAIPUR (RAJ.)
Name-Somya Soni Class - B.Tech, III yr, CSE Sem-VI Batch - B

Subject – Operating Systems (CS-361)

PROGRAM - 15

OBJECTIVE – Write a program to copy a file.

CODE –

#include <errno.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include <sys/stat.h>

#define BLKSIZE 1024


#define READ_FLAGS O_RDONLY
#define WRITE_FLAGS (O_WRONLY | O_CREAT | O_EXCL)
#define WRITE_PERMS (S_IRUSR | S_IWUSR)

int copyfile(int fromfd, int tofd) {


char buf[BLKSIZE];
int bytesread;
int byteswritten = 0;
int totalbytes = 0;

for (;;) {
while (((bytesread = read(fromfd, buf, BLKSIZE)) == -1) && (errno == EINTR)) ; /* Handle
interruption by signal */
if (bytesread <= 0) /* Real error or end-of-file on fromfd */
break;

char *bp = buf;


while (bytesread > 0) {
while (((byteswritten = write(tofd, bp, bytesread)) == -1) && (errno == EINTR)) ; /* Handle
interruption by signal */
if (byteswritten < 0) /* Real error on tofd */
break;
totalbytes += byteswritten;
bytesread -= byteswritten;
bp += byteswritten;
}
if (byteswritten == -1)
break; /* Real error on tofd */
}

return totalbytes;
}
COLLEGE OF TECHNOLOGY AND ENGINEERING, MPUAT, UDAIPUR (RAJ.)
Name-Somya Soni Class - B.Tech, III yr, CSE Sem-VI Batch - B

Subject – Operating Systems (CS-361)

int main(int argc, char *argv[]) {


int bytes;
int fromfd, tofd;

if (argc != 3) {
fprintf(stderr, "Usage: %s from_file to_file\n", argv[0]);
return 1;
}

if ((fromfd = open(argv[1], READ_FLAGS)) == -1) {


perror("Failed to open input file");
return 1;
}

if ((tofd = open(argv[2], WRITE_FLAGS, WRITE_PERMS)) == -1) {


perror("Failed to create output file");
close(fromfd);
return 1;
}

bytes = copyfile(fromfd, tofd);


printf("%d bytes copied from %s to %s\n", bytes, argv[1], argv[2]);

close(fromfd);
close(tofd);

return 0;
}

OUTPUT :-
COLLEGE OF TECHNOLOGY AND ENGINEERING, MPUAT, UDAIPUR (RAJ.)
Name-Somya Soni Class - B.Tech, III yr, CSE Sem-VI Batch - B

Subject – Operating Systems (CS-361)

PROGRAM - 16

OBJECTIVE – Write a program for which output is automatically directed to a


named file rather than on to the console.

CODE –

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <unistd.h>

int main() {
int fd;
if ((fd = open("program16", O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR)) < 0) {
perror("Error in opening file");
exit(1);
}
close(1);
dup(fd);
printf("Deepak Lohar\n");
close(fd);
return 0;
}

OUTPUT :-
COLLEGE OF TECHNOLOGY AND ENGINEERING, MPUAT, UDAIPUR (RAJ.)
Name-Somya Soni Class - B.Tech, III yr, CSE Sem-VI Batch - B

Subject – Operating Systems (CS-361)

PROGRAM - 17

OBJECTIVE – Write a program that redirects standards output to the file my.file
(or Write a program that do the following operation cat XYZ > myfile). Using
dup2 rather than dup.

CODE –

#include <fcntl.h>
#include <stdio.h>
#include <sys/stat.h>
#include <unistd.h>

#define CREATE_FLAGS (O_WRONLY | O_CREAT | O_APPEND)


#define CREATE_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)

int main(void) {
int fd;
fd = open("program17.txt", CREATE_FLAGS, CREATE_MODE);
if (fd == -1) {
perror("Failed to open program17.txt");
return 1;
}
if (dup2(fd, STDOUT_FILENO) == -1) {
perror("Failed to redirect standard output");
return 1;
}
if (close(fd) == -1) {
perror("Failed to close the file");
return 1;
}
printf("OK\n"); // Output will be redirected to program17.txt
return 0;
}

OUTPUT :-
COLLEGE OF TECHNOLOGY AND ENGINEERING, MPUAT, UDAIPUR (RAJ.)
Name-Somya Soni Class - B.Tech, III yr, CSE Sem-VI Batch - B

Subject – Operating Systems (CS-361)

PROGRAM - 18

OBJECTIVE – Write a program to create an empty directory using system calls.

CODE –

#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>

int main(int argc, char *argv[]) {


if (argc != 2) {
printf("Usage: %s directory\n", argv[0]);
exit(1);
}

if (mkdir(argv[1], 0744) != 0) {
perror("Error in Making Directory");
exit(1);
}

return 0;
}

OUTPUT :-
COLLEGE OF TECHNOLOGY AND ENGINEERING, MPUAT, UDAIPUR (RAJ.)
Name-Somya Soni Class - B.Tech, III yr, CSE Sem-VI Batch - B

Subject – Operating Systems (CS-361)

PROGRAM - 19

OBJECTIVE – Write a program to remove a directory using system call.

CODE –

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <fcntl.h>
#include <sys/stat.h>

int main(int argc, char *argv[]) {


if (argc != 2) {
fprintf(stderr, "Usage: %s <file>\n", argv[0]);
fprintf(stderr, "Too few arguments\n");
exit(1);
}

if (remove(argv[1]) != 0) {
perror("Error in Removing File");
exit(1);
}

return 0;
}

OUTPUT :-
COLLEGE OF TECHNOLOGY AND ENGINEERING, MPUAT, UDAIPUR (RAJ.)
Name-Somya Soni Class - B.Tech, III yr, CSE Sem-VI Batch - B

Subject – Operating Systems (CS-361)

PROGRAM - 20

OBJECTIVE – Write a program to output current working directory.

CODE –

#include <limits.h>
#include <stdio.h>
#include <unistd.h>

#ifndef PATH_MAX
#define PATH_MAX 255
#endif

int main(void) {
char mycwd[PATH_MAX];

if (getcwd(mycwd, PATH_MAX) == NULL) {


perror("Failed to get current working directory");
return 1;
}

printf("Current working directory: %s\n", mycwd);

return 0;
}

OUTPUT :-
COLLEGE OF TECHNOLOGY AND ENGINEERING, MPUAT, UDAIPUR (RAJ.)
Name-Somya Soni Class - B.Tech, III yr, CSE Sem-VI Batch - B

Subject – Operating Systems (CS-361)

PROGRAM - 21

OBJECTIVE – Write a program to list files in a directory.

CODE –
#include <dirent.h>
#include <errno.h>
#include <stdio.h>

int main(int argc, char *argv[]) {


struct dirent *direntp;
DIR *dirp;

if (argc != 2) {
fprintf(stderr, "Usage: %s directory_name\n", argv[0]);
return 1;
}

if ((dirp = opendir(argv[1])) == NULL) {


perror("Failed to open directory");
return 1;
}

while ((direntp = readdir(dirp)) != NULL) {


printf("%s\n", direntp->d_name);
}

if (closedir(dirp) == -1) {
perror("Failed to close directory");
return 1;
}

return 0;
}

OUTPUT :-
COLLEGE OF TECHNOLOGY AND ENGINEERING, MPUAT, UDAIPUR (RAJ.)
Name-Somya Soni Class - B.Tech, III yr, CSE Sem-VI Batch - B

Subject – Operating Systems (CS-361)

PROGRAM - 22

OBJECTIVE – Write a program that returns true if a given file is a directory &
false otherwise.

CODE –

#include <stdio.h>
#include <time.h>
#include <sys/stat.h>

int main(int argc, char *argv[]) {


if (argc != 2) {
fprintf(stderr, "Usage: %s <file_or_directory>\n", argv[0]);
return 1;
}

struct stat statbuf;


if (stat(argv[1], &statbuf) == -1) {
perror("Failed to get status of file/directory");
return 1;
}

if (S_ISDIR(statbuf.st_mode)) {
printf("%s: is a directory\n", argv[1]);
} else {
printf("%s: is a file\n", argv[1]);
}

return 0;
}

OUTPUT :-
COLLEGE OF TECHNOLOGY AND ENGINEERING, MPUAT, UDAIPUR (RAJ.)
Name-Somya Soni Class - B.Tech, III yr, CSE Sem-VI Batch - B

Subject – Operating Systems (CS-361)

PROGRAM - 23
OBJECTIVE – Write a program that can display the type of a given file like
regular, directory etc.

CODE –
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <fcntl.h>
#include <sys/stat.h>

int main(int argc, char *argv[]) {


struct stat statbuff;
int check;

if (argc != 2) {
printf("Usage: %s <file_path>\n", argv[0]);
exit(1);
}

check = stat(argv[1], &statbuff);


if (check != 0) {
perror("Error in getting file status");
exit(1);
}

if (S_ISREG(statbuff.st_mode)) {
printf("Regular File\n");
} else if (S_ISDIR(statbuff.st_mode)) {
printf("Directory\n");
} else if (S_ISCHR(statbuff.st_mode)) {
printf("Character Device\n");
} else {
printf("Other File\n");
}

return 0;
}

OUTPUT :-
COLLEGE OF TECHNOLOGY AND ENGINEERING, MPUAT, UDAIPUR (RAJ.)
Name-Somya Soni Class - B.Tech, III yr, CSE Sem-VI Batch - B

Subject – Operating Systems (CS-361)

PROGRAM - 24

OBJECTIVE – Write a program to display the permission of a given file.

CODE –

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <fcntl.h>
#include <sys/stat.h>

int main(int argc, char *argv[]) {


struct stat statbuff;
int check;

if (argc != 2) {
printf("Usage: %s <file_path>\n", argv[0]);
exit(1);
}

check = stat(argv[1], &statbuff);


if (check != 0) {
perror("Error in getting file status");
exit(1);
}

// Check permissions for owner


if ((statbuff.st_mode & S_IRUSR) == S_IRUSR)
printf("Owner has Read Permission\n");
if ((statbuff.st_mode & S_IWUSR) == S_IWUSR)
printf("Owner has Write Permission\n");
if ((statbuff.st_mode & S_IXUSR) == S_IXUSR)
printf("Owner has Execute Permission\n");

// Check permissions for group


if ((statbuff.st_mode & S_IRGRP) == S_IRGRP)
printf("Group has Read Permission\n");
if ((statbuff.st_mode & S_IWGRP) == S_IWGRP)
printf("Group has Write Permission\n");
if ((statbuff.st_mode & S_IXGRP) == S_IXGRP)
printf("Group has Execute Permission\n");

// Check permissions for others


if ((statbuff.st_mode & S_IROTH) == S_IROTH)
printf("Others has Read Permission\n");
COLLEGE OF TECHNOLOGY AND ENGINEERING, MPUAT, UDAIPUR (RAJ.)
Name-Somya Soni Class - B.Tech, III yr, CSE Sem-VI Batch - B

Subject – Operating Systems (CS-361)

if ((statbuff.st_mode & S_IWOTH) == S_IWOTH)


printf("Others has Write Permission\n");
if ((statbuff.st_mode & S_IXOTH) == S_IXOTH)
printf("Others has Execute Permission\n");

return 0;
}

OUTPUT :-
COLLEGE OF TECHNOLOGY AND ENGINEERING, MPUAT, UDAIPUR (RAJ.)
Name-Somya Soni Class - B.Tech, III yr, CSE Sem-VI Batch - B

Subject – Operating Systems (CS-361)

PROGRAM - 25

OBJECTIVE – Write a program to execute the equivalent of ls –l | sort –n +4.

CODE –

#include <errno.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>

int main(void) {
pid_t childpid;
int fd[2];

if (pipe(fd) == -1) {
perror("Failed to setup pipeline");
return 1;
}

if ((childpid = fork()) == -1) {


perror("Failed to fork");
return 1;
}

if (childpid == 0) { // Child process (ls)


if (dup2(fd[1], STDOUT_FILENO) == -1) {
perror("Failed to redirect stdout of ls");
return 1;
}

if (close(fd[0]) == -1 || close(fd[1]) == -1) {


perror("Failed to close extra pipe descriptors on ls");
return 1;
}

execl("/bin/ls", "ls", "-l", NULL);


perror("Failed to exec ls");
return 1;
} else { // Parent process (sort)
if (dup2(fd[0], STDIN_FILENO) == -1) {
perror("Failed to redirect stdin of sort");
return 1;
}

if (close(fd[0]) == -1 || close(fd[1]) == -1) {


COLLEGE OF TECHNOLOGY AND ENGINEERING, MPUAT, UDAIPUR (RAJ.)
Name-Somya Soni Class - B.Tech, III yr, CSE Sem-VI Batch - B

Subject – Operating Systems (CS-361)

perror("Failed to close extra pipe file descriptors on sort");


return 1;
}

execl("/bin/sort", "sort", "-n", "+4", NULL);


perror("Failed to exec sort");
return 1;
}
}

OUTPUT :-
COLLEGE OF TECHNOLOGY AND ENGINEERING, MPUAT, UDAIPUR (RAJ.)
Name-Somya Soni Class - B.Tech, III yr, CSE Sem-VI Batch - B

Subject – Operating Systems (CS-361)

PROGRAM - 26

OBJECTIVE – Write a program to handle SIGUSR1 and SIGUSR2 signal.

CODE –

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>

void fun(int);

int main() {
if (signal(SIGUSR1, fun) == SIG_ERR) {
printf("Handler for SIGUSR1 not registered\n");
exit(1);
}

if (signal(SIGUSR2, fun) == SIG_ERR) {


printf("Handler for SIGUSR2 not registered\n");
exit(1);
}

while (1)
pause(); // include <unistd.h>

return 0;
}

void fun(int i) {
if (i == SIGUSR1) {
printf("Received SIGUSR1 interrupt\n");
} else if (i == SIGUSR2) {
printf("Received SIGUSR2 interrupt\n");
}
}

OUTPUT :-
COLLEGE OF TECHNOLOGY AND ENGINEERING, MPUAT, UDAIPUR (RAJ.)
Name-Somya Soni Class - B.Tech, III yr, CSE Sem-VI Batch - B

Subject – Operating Systems (CS-361)

PROGRAM - 27

OBJECTIVE – Write a program which suspends itself till it receives a SIGALARM


signal.

CODE –

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>

void sig_alrm(int);

int main(int argc, char *argv[]) {


if (signal(SIGALRM, sig_alrm) == SIG_ERR) {
printf("Failed to register signal handler for SIGALRM\n");
exit(1);
}

alarm(5);
pause();

return 0;
}

void sig_alrm(int sig) {


if (sig == SIGALRM) {
printf("Wake Up\n");
}
}

OUTPUT :-
COLLEGE OF TECHNOLOGY AND ENGINEERING, MPUAT, UDAIPUR (RAJ.)
Name-Somya Soni Class - B.Tech, III yr, CSE Sem-VI Batch - B

Subject – Operating Systems (CS-361)

PROGRAM - 28
OBJECTIVE – Write a program which prints the second’s part of current time
whenever the SIGALRM signal is received by the program.

CODE –
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <signal.h>
#include <time.h>
#include <unistd.h>

void sig_hand(int);

int main() {
int i = 1;
pid_t pid;

if (signal(SIGALRM, sig_hand) == SIG_ERR) {


printf("Failed to register signal handler for SIGALRM\n");
exit(1);
}

while (i <= 5) {
i++;
pid = getpid();
sleep(2);
kill(pid, SIGALRM);
}
return 0;
}

void sig_hand(int sig) {


struct tm *t;
time_t tt;

if (sig == SIGALRM) {
tt = time(NULL);
t = localtime(&tt);
printf("%d\n", t->tm_sec);
}
}
OUTPUT :-
COLLEGE OF TECHNOLOGY AND ENGINEERING, MPUAT, UDAIPUR (RAJ.)
Name-Somya Soni Class - B.Tech, III yr, CSE Sem-VI Batch - B

Subject – Operating Systems (CS-361)

PROGRAM - 29

OBJECTIVE – Write a Program to print the entries of passwd file for a given user
name or user ID.

CODE –

#include <pwd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>

int main() {
char u_name[10];
char ch;
uid_t u_id;
struct passwd *p;

printf("Enter Your Choice\n");


printf("Whether you want to enter UNAME or UID? (N or I): ");
scanf(" %c", &ch); // Added space before %c to ignore leading whitespace

if (ch == 'N' || ch == 'n') {


printf("Enter UNAME: ");
scanf("%s", u_name);
p = getpwnam(u_name);
if (p != NULL) {
printf("\n%s\n %s\n %d\n %d\n %s\n %s\n %s\n", p->pw_name, p->pw_passwd, p-
>pw_uid,
p->pw_gid, p->pw_gecos, p->pw_dir, p->pw_shell);
} else {
printf("User not found.\n");
}
} else if (ch == 'I' || ch == 'i') {
printf("Enter UID: ");
scanf("%d", &u_id);
p = getpwuid(u_id);
if (p != NULL) {
printf("\n%s\n %s\n %d\n %d\n %s\n %s\n %s\n", p->pw_name, p->pw_passwd, p-
>pw_uid,
p->pw_gid, p->pw_gecos, p->pw_dir, p->pw_shell);
} else {
printf("User not found.\n");
}
} else {
printf("Wrong Choice\n");
COLLEGE OF TECHNOLOGY AND ENGINEERING, MPUAT, UDAIPUR (RAJ.)
Name-Somya Soni Class - B.Tech, III yr, CSE Sem-VI Batch - B

Subject – Operating Systems (CS-361)

return 0;
}

OUTPUT :-
COLLEGE OF TECHNOLOGY AND ENGINEERING, MPUAT, UDAIPUR (RAJ.)
Name-Somya Soni Class - B.Tech, III yr, CSE Sem-VI Batch - B

Subject – Operating Systems (CS-361)

PROGRAM - 30

OBJECTIVE – Write a program to print the details of the system.

CODE –

#include <grp.h>
#include <stdio.h>
#include <stdlib.h>

int main() {
char g_name[10];
gid_t gid;
char ch;
struct group *g;

printf("Enter Your Choice: \nEnter Group Name(N) \nEnter Group ID (I)\n");


printf("Enter Choice: ");
scanf(" %c", &ch); // Added a space before %c to skip whitespace characters

switch (ch) {
case 'N':
case 'n':
printf("Enter GNAME: ");
scanf("%s", g_name);
g = getgrnam(g_name);
if (g == NULL) {
perror("Error getting group by name");
exit(1);
}
printf("\n%s %s %d\n", g->gr_name, g->gr_passwd, g->gr_gid);
break;
case 'I':
case 'i':
printf("Enter GID: ");
scanf("%d", &gid);
g = getgrgid(gid);
if (g == NULL) {
perror("Error getting group by ID");
exit(1);
}
printf("\n%s %s %d\n", g->gr_name, g->gr_passwd, g->gr_gid);
break;
default:
printf("Wrong Choice\n");
}
COLLEGE OF TECHNOLOGY AND ENGINEERING, MPUAT, UDAIPUR (RAJ.)
Name-Somya Soni Class - B.Tech, III yr, CSE Sem-VI Batch - B

Subject – Operating Systems (CS-361)

return 0;
}

OUTPUT :-
COLLEGE OF TECHNOLOGY AND ENGINEERING, MPUAT, UDAIPUR (RAJ.)
Name-Somya Soni Class - B.Tech, III yr, CSE Sem-VI Batch - B

Subject – Operating Systems (CS-361)

PROGRAM – 31, 32

OBJECTIVE – Write Two Programs:


31. Write a program which Reads what is written to a named pipe & writes it to
standard output.
32. Write an informative message to a named pipe.

CODE 1 –

// Server
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#define BLKSIZE 1024

int copyfile(int fromfd, int tofd) {


char buf[BLKSIZE];
ssize_t bytesread, byteswritten;
ssize_t totalbytes = 0;

while ((bytesread = read(fromfd, buf, BLKSIZE)) > 0) {


char *bp = buf;
while ((byteswritten = write(tofd, bp, bytesread)) > 0) {
totalbytes += byteswritten;
bytesread -= byteswritten;
bp += byteswritten;
}
if (byteswritten == -1) {
perror("write");
return -1;
}
}

if (bytesread == -1) {
perror("read");
return -1;
}

return totalbytes;
}
COLLEGE OF TECHNOLOGY AND ENGINEERING, MPUAT, UDAIPUR (RAJ.)
Name-Somya Soni Class - B.Tech, III yr, CSE Sem-VI Batch - B

Subject – Operating Systems (CS-361)

int main(int argc, char *argv[]) {


int requestfd;

if (argc != 2) {
fprintf(stderr, "Usage: %s fifoname > logfile\n", argv[0]);
return 1;
}

// Create a named pipe to handle incoming requests


if (mkfifo(argv[1], 0666) == -1 && errno != EEXIST) {
perror("mkfifo");
return 1;
}

// Open a read/write communication endpoint to the pipe


if ((requestfd = open(argv[1], O_RDWR)) == -1) {
perror("open");
return 1;
}

if (copyfile(requestfd, STDOUT_FILENO) == -1) {


perror("copyfile");
return 1;
}

close(requestfd);
return 0;
}

CODE 2 –

// Client
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
#include <sys/stat.h>
#define FIFOARG 1
#define PIPE_BUF 1024 // Define PIPE_BUF if not defined

int main(int argc, char *argv[]) {


time_t curtime;
int len;
char requestbuf[PIPE_BUF];
COLLEGE OF TECHNOLOGY AND ENGINEERING, MPUAT, UDAIPUR (RAJ.)
Name-Somya Soni Class - B.Tech, III yr, CSE Sem-VI Batch - B

Subject – Operating Systems (CS-361)

int requestfd;
if (argc != 2) { /* name of server fifo is passed on the command line */
fprintf(stderr, "Usage: %s fifoname\n", argv[0]);
return 1;
}
if ((requestfd = open(argv[FIFOARG], O_WRONLY)) == -1) {
perror("Client failed to open log fifo for writing");
return 1;
}
curtime = time(NULL);
snprintf(requestbuf, PIPE_BUF, "%d: %s", (int)getpid(), ctime(&curtime));
len = strlen(requestbuf);
if (write(requestfd, requestbuf, len) != len) {
perror("Client failed to write");
return 1;
}
close(requestfd);
return 0;
}

OUTPUT :-

You might also like