Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <dirent.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <string.h>
- #include <fcntl.h>
- #include <signal.h>
- #define MAX_FILENAME_LENGTH 256
- int pipefd[2];
- void handle_signal(int signal) {
- if (signal == SIGALRM) {
- printf("Timpul a expirat!\n");
- close(pipefd[1]);
- exit(EXIT_SUCCESS);
- }
- else if (signal == SIGUSR1) {
- printf("Procesul P a primit semnal pentru stergerea fisierului.\n");
- }
- }
- void process_file(char *filename) {
- int fd;
- struct stat file_stat;
- char buffer[MAX_FILENAME_LENGTH];
- fd = open(filename, O_RDONLY);
- if (fd == -1) {
- perror("Eroare la deschiderea fisierului");
- return;
- }
- fstat(fd, &file_stat);
- read(fd, buffer, MAX_FILENAME_LENGTH);
- printf("Nume fisier: %s, Dimensiune: %ld bytes\n", buffer, file_stat.st_size);
- close(fd);
- unlink(filename);
- }
- void process_directory(char *dirname, int interval) {
- DIR *dir;
- struct dirent *entry;
- struct stat file_stat;
- int pid;
- if ((pid = fork()) == -1) {
- perror("Eroare la fork");
- exit(EXIT_FAILURE);
- }
- else if (pid == 0) {
- close(pipefd[1]);
- dup2(pipefd[0], STDIN_FILENO);
- close(pipefd[0]);
- execl("./proces_F", "proces_F", NULL);
- perror("Eroare la executia procesului F");
- exit(EXIT_FAILURE);
- }
- close(pipefd[0]);
- write(pipefd[1], dirname, strlen(dirname) + 1);
- signal(SIGALRM, handle_signal);
- signal(SIGUSR1, handle_signal);
- alarm(interval);
- dir = opendir(dirname);
- if (dir == NULL) {
- perror("Eroare la deschiderea directorului");
- exit(EXIT_FAILURE);
- }
- while ((entry = readdir(dir)) != NULL) {
- if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0)
- continue;
- char filepath[MAX_FILENAME_LENGTH];
- snprintf(filepath, MAX_FILENAME_LENGTH, "%s/%s", dirname, entry->d_name);
- if (stat(filepath, &file_stat) == -1) {
- perror("Eroare la obtinerea informatiilor despre fisier");
- continue;
- }
- if (S_ISREG(file_stat.st_mode)) {
- write(pipefd[1], entry->d_name, strlen(entry->d_name) + 1);
- }
- }
- closedir(dir);
- wait(NULL);
- }
- int main(int argc, char *argv[]) {
- if (argc != 3) {
- exit(EXIT_FAILURE);
- }
- if (pipe(pipefd) == -1) {
- perror("Eroare la crearea pipe-ului");
- exit(EXIT_FAILURE);
- }
- process_directory(argv[1], atoi(argv[2]));
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement