Documente Academic
Documente Profesional
Documente Cultură
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include <unistd.h>
#include <dirent.h>
#include <fcntl.h>
#include <string.h>
#include <signal.h>
void handlerkill(int sig)
{
(void)signal(SIGKILL, handlerkill);
kill(pid,SIGKILL);
}
void functie(char fisier[256], char cr)
{
int pipeFT[2];
int pid;
int rv;
int status;
char buff[256];
char c;
FILE *f,*f1,*f2;
pipe(pipeFT);
pid = fork();
if(pid == -1)
{
perror("fork");
exit(1);
}
close(pipeFT[1]);
f = fopen(fisier, "r");
while(rv = read(f, &buff, 1024))
write(pipeFT[0], &buff, rv);
fclose(f);
close(pipeFT[0]);
}
else{ // poces TATA
close(pipeFT[0]);
f1 = fopen(pipeFT[1], "r");
f2 = fopen("aux.txt", "w");
while (fgets(&buff, 100, f1) != NULL)
fprintf(f2, "%s", &buff);
while((c=fgetc(f2))!=EOF)
if(c==cr)
{
printf("GASIT!!!");
signal(SIGKILL, handlerkill);
}
waitpid(-1, &status, 0);
}
}
int main()
{
char caracter;
char fis[256];
printf("\nInroduceti cale fisierului si fisierul:\n");
scanf("%s", fis);
printf("\nIntroduceti caracteru pe care doriti sa-l cautati:\n");
scanf("%c", caracter);
functie(fis,caracter);
}
Alt model de problema
Scrieti un program C care parcurge recursiv un director dat ca parametru ( daca nu se da nici-un
parametru se va parcurge directorul curent) si afiseaza numele fisierelor a caror dimensiune nu
depaseste 100 de octeti. Daca fisierul este legatura simbolica se va afisa calea catre fisierul spre care
indica legatura simbolica.
#include <stdio.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <dirent.h>
#include <unistd.h>
#include <string.h>
void findfiles(char *path) {
struct dirent *entry; //This structure will hold file information
struct stat file_status; //This structure will be used to query file status
DIR *dir = opendir(path); //This pointer references the directory stream