linux 질문입니다.

qaz123의 이미지

#include
#include
#include
#include
#define MAXLINE 100
int main(){
int n;
int pid1;
int pid2;
int fd[2];
char line[MAXLINE];
pipe(fd);

pid1=fork();
if (pid1==0){
printf("\nchild1 process's pid %d", getpid());
close(fd[0]);
dup2(fd[1],getchar());
close(fd[1]);
exit(0);
}

pid2=fork();
if (pid2==0){
printf("\nchild2 process's pid %d", getpid());
close(fd[1]);
while((n=read(toupper(fd[0]), line, MAXLINE))>0)
while(STDOUT_FILENO, line, n);

exit(0);
}
}

한 프로세스에서는 표준입력을 받고
다른 프로세스는 표준입력을 받은걸 소문자를 대문자로 바꿔 출력하려고 하는데요
결과값이 안나오네요..

익명 사용자의 이미지

꼭 C언어로 해야 하나요? 이런 일은 bash가 제격입니다.

cat | tr a-z A-Z

꼭 C로 해야 한다면 dup2 사용법을 제대로 숙지하시길.

https://linux.die.net/man/2/dup2

나빌레라의 이미지

getchar()는 fd를 리턴하지 않습니다.

아래는 manpage 설명 중 일부입니다.

RETURN VALUE

fgetc(), getc() and getchar() return the character read as an unsigned
char cast to an int or EOF on end of file or error.

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

세벌의 이미지

qaz123님께.

질문 전에
https://wiki.kldp.org/wiki.php/DocbookSgml/Beginner_QA-KLDP#AEN70
한 번 읽어보심 좋아요.

kldp 에서 소스코드는 code 태그로 감싸주세요.

들여쓰기 하나 없는 코드 보시고 답변 달아주시는 분이 존경스러울 따름입니다. :)