Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Napisz program, który otworzy do odczytu wskazany plik tekstowy, a następnie wywoła funkcję fork(). Jeden z powstałych procesów policzy sumę liczb parzystych znalezionych w otwartym pliku, a drugi liczb nieparzystych.
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <sys/fcntl.h>
- #include <unistd.h>
- #include <ctype.h>
- #include <string.h>
- #define BUFFER_SIZE 128
- int calculate_odd(int fd)
- {
- ssize_t status;
- char buffer[BUFFER_SIZE];
- int result = 0;
- for(;;) {
- status = read(fd, buffer, BUFFER_SIZE-1);
- if(status == -1) {
- perror("read");
- exit(EXIT_FAILURE);
- }
- else if(status == 0) {
- break;
- }
- else {
- for(int i = 0; i < strlen(buffer); i++) {
- if(isdigit(buffer[i])) {
- int number_buffer = buffer[i] - '0';
- if(number_buffer & 1)
- result += number_buffer;
- }
- }
- }
- }
- lseek(fd, 0, SEEK_SET);
- return result;
- }
- int calculate_even(int fd)
- {
- ssize_t status;
- char buffer[BUFFER_SIZE];
- int result = 0;
- for(;;) {
- status = read(fd, buffer, BUFFER_SIZE-1);
- if(status == -1) {
- perror("read");
- exit(EXIT_FAILURE);
- }
- else if(status == 0) {
- break;
- }
- else {
- for(int i = 0; i < strlen(buffer); i++) {
- if(isdigit(buffer[i])) {
- int number_buffer = buffer[i] - '0';
- if(!(number_buffer & 1))
- result += number_buffer;
- }
- }
- }
- }
- lseek(fd, 0, SEEK_SET);
- return result;
- }
- int main(int argc, char *argv[])
- {
- if(argc != 2) {
- fprintf(stderr, "Niepoprawna liczba argumentow!\n");
- return EXIT_FAILURE;
- }
- pid_t pid;
- int fd;
- if((fd = open(argv[1], O_RDONLY, 0600)) == -1) {
- perror("open");
- return EXIT_FAILURE;
- }
- pid = fork();
- if(pid == -1) {
- perror("fork");
- return EXIT_FAILURE;
- }
- else if(pid == 0)
- printf("Suma cyfr parzystych: %d\n", calculate_even(fd));
- else
- printf("Suma cyfr nieparzystych: %d\n", calculate_odd(fd));
- return EXIT_SUCCESS;
- }
Add Comment
Please, Sign In to add comment