Перенаправление потокового вывода, отладка и проверка производится на терминале UNIX'а - C (СИ)
Формулировка задачи:
#include <stdlib.h> #include <string.h> #include <stdio.h> #include <sys/types.h> #include <unistd.h> #include <wait.h> #include <sys/stat.h> #include <fcntl.h> #include <stdbool.h> int main(){ int i, j, y, c,f2, f3; bool f1; const int Slen = 4096; int fd[2]; i = 0; j = 0; y = 0; c = 0; f1 = false; f2 = -1; f3 = 0; char **b; b=malloc(256*sizeof(char*)); for (i = 0; i < 256; i++) b[i]=malloc(Slen); i=0; while (c != EOF) { for (i = 0; i < 256; i++) b[i][0] = '\0'; while (((c = getchar() != '\n' || (c != EOF)) && ((f3 + y) < Slen)) { if ((c != ' ' && (c != '\t' && (c != '>' ) { b[i][j] = c; y++; j++; } if ((c == ' ' && (c == '\t' ) { i++; j=0; f3++; } if (c == '>' f2 = i; if (y == Slen) { printf("String is too long" ; f1 = true; } } if (f1){ fd[0] = open(b[f2], 0); b[i]=0; if(fork()==0) { dup2(fd[0],1); execvp(b[0],b+1); exit(0); } wait(&c); } } else { while (((c = getchar()) != EOF) && (c != '\n' );} close(fd[0]); close(fd[1]); return 0; }
Решение задачи: «Перенаправление потокового вывода, отладка и проверка производится на терминале UNIX'а»
textual
Листинг программы
while ((c = getchar()) != '\n' && c != EOF && f3 + y < Slen)
Объяснение кода листинга программы
- В этом коде используется оператор while, который выполняет указанное в нём условие до тех пор, пока оно истинно.
- Внутри оператора while происходит операция присваивания переменной c значения, возвращаемого функцией getchar().
- Функция getchar() используется для чтения символа из стандартного ввода (обычно это клавиатура).
- Оператор сравнения проверяет, что считанный символ не является символом новой строки '\n' и не является концом файла EOF.
- Условие также проверяет, что значение переменной f3 плюс значение переменной y меньше длины строки Slen.
- Если условие истинно, то происходит переход к следующей итерации цикла.
- Если условие ложно, то происходит выход из цикла.
- В этом коде нет использования переменной f3 и y, поэтому их значения не определены.
- Переменная Slen содержит длину строки S.
- Значение переменной c не определено, поскольку она используется только внутри цикла и её значение не сохраняется после окончания итерации.
- В этом коде нет ввода или вывода данных, поэтому переменная S не определена.
- Значение переменной EOF не определено, поскольку она используется только в условии цикла и её значение не сохраняется.
- В этом коде нет использования переменной Slen, поэтому её значение не определено.
- В этом коде нет использования переменной c, поэтому её значение не определено.
- В этом коде нет использования переменной EOF, поэтому её значение не определено.
- В этом коде нет использования переменной S, поэтому её значение не определено.
- В этом коде нет использования переменной f3, поэтому её значение не определено.
- В этом коде нет использования переменной y, поэтому её значение не определено.
- В этом коде нет использования переменной Slen, поэтому её значение не определено.
- В этом коде нет использования переменной c, поэтому её значение не определено.