OS Code
unknown
c_cpp
2 years ago
2.3 kB
12
Indexable
// We open a file using a thread
// the thread will write something into the file
// Then it goes to sleep while the MAIN writes something to the file
// Then we read everything written to the file using the thread
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <fcntl.h>
#include <string.h>
void* runner (void* arg){
// as we want to append using the main thread
int fd = open("test.txt", O_RDWR | O_CREAT | O_APPEND);
if(fd == -1){
perror("Couldnt create a file");
return 2;
}
printf("{RUNNER} The file has been created\n");
// writing to the file
char* sentence2 = "Test from runner \n";
printf("Wrote %s\n", sentence2);
write(fd, sentence2, strlen(sentence2));
printf("{RUNNER} Written to the test file \n");
printf("{RUNNER} Going to sleep for the MAIN thread to come into action\n");
// now we go to sleep for the MAIN thread to append more content to the test file
sleep(10);
printf("{RUNNER} is awake, proceeding to the read the data from the file\n");
char read_buffer[1000];
read(fd, &read_buffer,sizeof(read_buffer)); // plus one for the lseek
printf("{RUNNER} Reading is succesful\n");
printf("{RUNNER} Data read : %s\n", read_buffer);
pthread_exit(0);
}
int main(int argc, char *argv[]){
pthread_t thread1;
// creating the thread
if(pthread_create(&thread1, NULL, &runner, NULL) != 0){
perror("Couldnt create thread");
return 1;
};
printf("{MAIN} Runner is created. MAIN is going to sleep for the runner to write to the test file\n");
sleep(5); // while the thread finishes writing to the file it creates
printf("{MAIN} has now woken up, appending more data to the test file\n");
int fd = open("test.txt", O_RDWR | O_APPEND);
if(fd == -1){
perror("Couldnt create a file");
return 2;
}
lseek(fd, 1, SEEK_END);
char* sentence = "Test from main \n";
write(fd, sentence, strlen(sentence));
printf("Wrote %s from main\n", sentence);
printf("{MAIN} Writing to the file complete.\n");
printf("{MAIN} going to sleep for the RUNNER to read from the shared file");
sleep(2);
pthread_exit(0);
}Editor is loading...