Использование fork() и execlp для подсчета строк
Я пытаюсь прочитать файл, сосчитать строки этого файла, а затем представить результат в конце. У меня все отлично работает, единственная проблема - команда execlp, я понятия не имею, как с ней работать.
Код следующий:
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#define exit_on_error(s,m) if (s < 0) { perror(m); exit(1); }
int main(int argc, char *argv[]){
int i, status, total=0, F, n=0;
for(i=1; i<argc; i++){
if(fork()==0){
F=open(argv[i], O_RDONLY);
exit_on_error(F,"Erro na abertura do ficheiro");
if(fork()==0)
{
wait();
// ?????????????
execlp("wc", "wc", "-l", NULL);
}
close (F);
return (0);
}
else{
wait(&status);
total += status >> 8;
}
}
for(i=1; i<argc; i++){
printf("PID=(%d), Ficheiro %s\n", getpid(), argv[i]);
}
for(i=1; i<argc; i++){
printf("Numero de linhas do ficheiro %s: [%d]\n", argv[i], n);
}
printf("Ficheiros: [%d]---Erros: [%d]\n", --argc, total);
}
И это показывает что-то вроде этого: название программы 2.c
./2 phonecontacts.txt ddd
Erro na abertura do ficheiro: нет такого файла или каталога
PID=(3565), Ficheiro phonecontact.txt (файл, содержащий 20 строк)
PID = (3565), Ficheiro DDD (этот не существует)
Numero de linhas do ficheiro phonecontact.txt: [0] (здесь должно было быть 20 строк)
Numero de linhas do ficheiro ddd: [0] (этот не существует)
Ficheiros: [2] --- Erros [1]
wc: стандартный ввод: ошибка ввода / вывода 0
1 ответ
Немного поработав, мне удалось решить мою проблему:
int main(int argc, char *argv[]){
int i, status, total=0, F;
for(i=1; i<argc; i++){
if(fork()==0){
close(0);
F=open(argv[i], O_RDONLY);
exit_on_error(F,"Erro na abertura do ficheiro");
if(fork())
{
printf("Numero de linhas do ficheiro %s: \n", arg$
execlp("wc", "wc", "-l", NULL);
}
close (F);
return (0);
}
else{
wait(&status);
total += status >> 8;
}
printf("PID=(%d), Ficheiro %s\n", getpid(), argv[i]);
}
printf("Ficheiros: [%d]---Erros: [%d]\n", --argc, total);
}
Это код полностью функциональный.