Add lab 2
This commit is contained in:
parent
d119dc459f
commit
ca9bab7416
@ -77,6 +77,12 @@ int main() {
|
|||||||
printf("The total is %d\n", total);
|
printf("The total is %d\n", total);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (strcmp(input, "exec\n")) {
|
||||||
|
char *args[2];
|
||||||
|
args[0] = "/bin/ls";
|
||||||
|
args[1] = NULL;
|
||||||
|
execv(args[0], args);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
8
Lab2/.idea/.gitignore
vendored
Normal file
8
Lab2/.idea/.gitignore
vendored
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
|
# Editor-based HTTP Client requests
|
||||||
|
/httpRequests/
|
||||||
|
# Datasource local storage ignored files
|
||||||
|
/dataSources/
|
||||||
|
/dataSources.local.xml
|
2
Lab2/.idea/Lab2.iml
Normal file
2
Lab2/.idea/Lab2.iml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module classpath="CMake" type="CPP_MODULE" version="4" />
|
4
Lab2/.idea/misc.xml
Normal file
4
Lab2/.idea/misc.xml
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$" />
|
||||||
|
</project>
|
8
Lab2/.idea/modules.xml
Normal file
8
Lab2/.idea/modules.xml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/Lab2.iml" filepath="$PROJECT_DIR$/.idea/Lab2.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
6
Lab2/.idea/vcs.xml
Normal file
6
Lab2/.idea/vcs.xml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
6
Lab2/CMakeLists.txt
Normal file
6
Lab2/CMakeLists.txt
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.22)
|
||||||
|
project(Lab2 C)
|
||||||
|
|
||||||
|
set(CMAKE_C_STANDARD 99)
|
||||||
|
|
||||||
|
add_executable(Lab2 main.c)
|
BIN
Lab2/documentation/Lab2-v1.pdf
Normal file
BIN
Lab2/documentation/Lab2-v1.pdf
Normal file
Binary file not shown.
39
Lab2/main.c
Normal file
39
Lab2/main.c
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <wait.h>
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
printf("Parent PID: [%d]\n", getpid()); // Initial parent
|
||||||
|
if (fork() == 0) { // Forking child
|
||||||
|
printf("Child PID: [%d]\n", getpid());
|
||||||
|
int to_lowercase[2];
|
||||||
|
pipe(to_lowercase);
|
||||||
|
if (fork() == 0) { // Forking grandchild
|
||||||
|
printf("Grandchild PID: [%d]\n", getpid());
|
||||||
|
char output[100];
|
||||||
|
read(to_lowercase[0], output, 100); // Reading from pipe
|
||||||
|
close(to_lowercase[0]); // Closing read pipe
|
||||||
|
for (int i = 0; i < 100; i++) { // Converting to lowercase using ASCII
|
||||||
|
if (output[i] >= 'A' && output[i] <= 'Z') {
|
||||||
|
output[i] += 32;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("%s", output);
|
||||||
|
printf("Grandchild PID: [%d]\n", getpid());
|
||||||
|
exit(EXIT_SUCCESS);
|
||||||
|
} else { // Child
|
||||||
|
char input[100];
|
||||||
|
fgets(input, 100, stdin); // Input
|
||||||
|
write(to_lowercase[1], input, 100); // Writing to pipe
|
||||||
|
close(to_lowercase[1]); // Closing write pipe
|
||||||
|
wait(NULL);
|
||||||
|
printf("Grandchild PID: [%d]\n", getpid());
|
||||||
|
exit(EXIT_SUCCESS);
|
||||||
|
}
|
||||||
|
} else { // Parent
|
||||||
|
wait(NULL);
|
||||||
|
printf("Parent PID: [%d]\n", getpid());
|
||||||
|
}
|
||||||
|
exit(EXIT_SUCCESS);
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user