У меня проблемы с назначением, когда я должен использовать различные системные вызовы.Вот инструкции:
1) Ваша программа инициализирует один канал с помощью системного вызова pipe () и вызывает системный вызов fork ()
2) Дочерний процесс подключит канал с помощьюсистемный вызов dup2 () к stdin и запуск bc
3) Родительский процесс будет считывать данные из stdin или файла (как это практикуется в Назначении 1) и отправлять команды дочернему процессу через канал.
4) Родительский процесс будет ожидать завершения дочернего процесса, собирает код возврата дочернего процесса и отображает код возврата в стандартный вывод.
#include<stdio.h>
#include<unistd.h>
#include<sys/syscall.h>
#include<sys/types.h>
#include<sys/wait.h>
int main(int argc, char *argv[]) {
FILE *fin = stdin;
printf("Assignment 2: Forks and pipes by Mariah Bleak\nPlease provide a$
pid_t p;
int fp[2];
int num[3];
pipe(fp);
p = fork();
dprintf(fp[1], "scale = 4\n");
if( p < 0 ) {
perror("Creating process");
return -1;
}
if( p == 0 ) { //Child Process
close(fp[1]);
dup2(fp[0], STDIN_FILENO);
close(fp[0]);
execlp("bc", "bc", NULL);
}
else { //Parent Process
FILE *fin = fdopen(fp[0], "r");
close(fp[0]);
if (argc > 1) {
fin = fopen(argv[1], "r");
}
if (fin == NULL) {
printf("Could not open %s\n", argv[1]);
perror("trying to open file");
return -1;
}
while (fscanf(fin, "%d %d %d", &num[0], &num[1], &num[2]) == 3)$
write(fp[1], "(num[0]*num[1])/num[2]", sizeof("((num[0]* num[1]$
close(fp[0]);
close(fp[1]);
}
int ret;
wait(&ret);
printf("Child returned %d\n", WEXITSTATUS(ret));
}
return 0;
}
Когда я запускаю свою программу, она не будетпрекратите получать данные с помощью Ctrl-D, но все еще будете ждать ввода.Любая помощь будет принята с благодарностью.