안녕하세요, 저는 C로 쉘을 만들려고합니다. 그리고 i/o 리다이렉션 부분에 붙어 있습니다. "333sh : myprog < in_file> out_file"과 같은 여러 리디렉션을 지원해야합니다. myprog는 in_file에서 입력을 가져오고 결과는 out_file로 리디렉션되는 식으로 진행됩니다. 나에게 출발점을 줄 수 있니? 감사합니다쉘 입출력 리다이렉션
0
A
답변
0
printf와 scanf (또는 stdin/stdout에서 작동하는 다른 함수)가있는 곳이면 파일 이름 (fprintf/fscanf)에 대한 인수를받는 함수로 바꾸고 그 인수에서 io 리디렉션 파일을 열어.
1
쓰고있는 쉘은 myprog
프로세스를 실행하고 어떤 식 으로든 입력을 in_file
에서 읽고 강제로 out_file
에 출력해야합니다.
가장 먼저 할 일은 입력을 분석하는 것입니다. 이것이 의미하는 바는 프로그램 내부에서 시작하려는 프로세스의 이름,에서 읽을 파일 이름 및 쓸 파일 이름을 나타냅니다. 이 작업을 수행하려면 기본적으로 문자열 myprog <in_file> out_file
을 토큰 화 한 다음 수행 할 작업에 대한 구조체와 같은 표현이 필요합니다.
리디렉션을 실제로 수행하는 방법은 매우 쉽습니다. 과정을 시작하려면 fork()
으로 가고 나서 execvp
으로 갈 것 같습니다. 파일 디스크립터가 포크에 복사되고 execvps에 걸쳐 유지된다는 사실을 깨닫게됩니다.
그래서 기본적으로 쉘, 당신은 input_file
의 파일 기술자 STDIN_FILENO을 교체하고 output_file
의 파일 기술자 STDOUT_FILENO을 대체 할 dup(2)
전화를 사용합니다. 그런 다음 fork하고 execvp하십시오. 포크 후 부모 프로세스 (셸)에서 STDOUT 및 STDIN 파일 설명자를 포크 이전의 상태로 복원하려는 경우 어떤 방식 으로든 해당 정보를 기억하고 싶을 것입니다.
관련 문제
- 1. 입출력 내 입출력
- 2. 유닉스 스크립트 파일 리다이렉션
- 3. 쉘에서의 파이썬 리다이렉션
- 4. 입출력
- 5. 쉘 스크립트에서 tee를 사용하는 stdoutt 및 stderr 리다이렉션
- 6. Linux 쉘에서 입출력 스트림 재 지정. 쉘은 리다이렉션 명령을 어떻게 처리합니까?
- 7. 리다이렉션 문제
- 8. 파이프의 비 차단 입출력
- 9. 파일 입출력
- 10. Python webapp2 : 리다이렉션
- 11. web.xml의 서버 측 리다이렉션?
- 12. C 소켓 리다이렉션
- 13. 맥 미니 NAT 리다이렉션
- 14. 파스칼 crt 출력 리다이렉션
- 15. CMD의 입력 리다이렉션
- 16. gdb에서 입력 리다이렉션 (MinGW)
- 17. CakePhp 불량 Auth 리다이렉션
- 18. 리디렉션되지 않는 PHP 리다이렉션
- 19. 쉘에서 C++ 입력 리다이렉션
- 20. NodeJS가 반복되는 리다이렉션
- 21. PHP 컬 리다이렉션 리디렉션
- 22. htaccess modulritten 페이지의 리다이렉션
- 23. 로그인시 Wordpress 리다이렉션
- 24. 출력 스트림 리다이렉션
- 25. 언어 특정 리다이렉션
- 26. 자바 서블릿 삭제 리다이렉션
- 27. htaccess 301 봇의 리다이렉션
- 28. 리다이렉션 bash : 파일이 아닌 변수의 내용
- 29. Symfony2 - 원하지 않는 자동 리다이렉션
- 30. PHP .htacces 및 index.php 리다이렉션
+1하지만 영업 담당자가 해당 파일을 열어야한다고 말할 수 있습니다. – Duck