Я написал небольшую программу под названием «л», который принимает стандартное устройство ввода символов и выводит прописные символы на стандартный вывод, см ниже (Примечание: код непосредственно ниже работ по желанию):Трубы и перенаправление, небольшая программа для тестирования понимания
#include <stdio.h>
int main(int argc, char** argv) {
char input[500];
printf("BLAH HAS STARTED OK......\n");
while (!feof(stdin)){
fprintf(stderr, "startloop\n");
input[0]=0;
fprintf(stderr, "blocking for input !\n");
fgets(input, 500, stdin);
fprintf(stderr, "finished blocking for input !\n");
int index=0;
while (input[index]!='\n' && input[index]!=0){
printf("%c", input[index]-32);
index++;
}
if (index==0){
break;
}
printf("\n");
fprintf(stderr, "endloop\n");
}
printf("BLAH CLOSED.....\n");
return 0;
}
И еще одна программа, которая создает канал для связи родителя с дочерним устройством, а также канал для связи между родителями и родителями. Затем этот процесс разворачивает дочерний элемент, stdin дочернего процесса перенаправляется на выходной конец родительского канала записи, а stdout дочернего процесса перенаправляется во входной конец родительского канала чтения. Поскольку бла-работа работает, как ожидалось, сама по себе, я ожидал, что тест, написанный в родительскую трубу для записи, вернется в столицах. Может ли кто-нибудь объяснить, что не так с моим пониманием?
#include <stdio.h>
int main(int argc, char** argv) {
int fds1[2];
int fds2[2];
pipe(fds1);
pipe(fds2);
int pid=fork();
if (pid) {
/* parent*/
close(fds1[0]);
close(fds2[1]);
char val[100];
FILE* parentwrite=fdopen(fds1[1], "w");
FILE* parentread=fdopen(fds2[0], "r");
fprintf(parentwrite, "this text should be printed in capitals\n");
while (!feof(parentread)){
fgets(val, 100, parentread);
printf("PARENT PRINTING TEXT FROM CHILD: %s\n", val);
}
}
else
{
/*child*/
close(fds1[1]);
close(fds2[0]);
dup2(fds1[0],0);
dup2(fds2[1],1);
execlp("./blah", "./blah", 0);
}
return 0;
}
пожалуйста, обратите внимание на fprints к STDERR просто, чтобы помочь мне попытаться понять, что происходит - я относительно новым для C –
Вы вставили большой блок кода и сказал *, что случилось с моим пониманием *. Что должен делать код, что он на самом деле делает? Ваша проблема не ясна ... –
Я поправлю свое сообщение, спасибо за отзыв –