다음 기능을 가진 프로그램 또는 기능을 작성하십시오.
- 프로그램 / 함수는 먼저 문자열
Hello, world!
을 표준 출력 스트림 에 쓰려고 시도 합니다. (프로그램 자체의 사소한 행동보다는 I / O에 중점을두기 때문에이 과제에 다른 형식의 출력을 사용할 수 없습니다.) 성공 여부에 따라 :- 출력에 성공
Hello, world!
하면 추가 동작없이 프로그램 / 기능이 종료됩니다. - 오류로 인해 올바른 출력을 생성하지 못한 경우 프로그램 / 기능은 문자열
Error writing "Hello, world!"
을 표준 오류 스트림 에 쓰려고 시도 합니다. (이 도전의 목적으로, 오류 처리 자체를 위해 오류 처리가 필요하지 않습니다.)
- 출력에 성공
설명
프로그램 / 기능은 입력없이 실행됩니다 (입력이 작동해야하는 언어로 작성되지 않은 경우 가장 간단한 입력으로 실행 됨).
출력을 생성 할 때 원하는 경우 단일 후행 줄 바꿈을 생성 할 수도 있지만 그렇게하는 것이 필수는 아닙니다.
프로그램이 구현하는 "표준 출력에 오류 쓰기"의 정의는 최소한 다음 경우를 오류로 처리해야합니다.
- 표준 출력이 존재하지 않습니다 (즉
stdout
, 닫힌 파일 핸들이거나 파일 디스크립터 1이 없거나 이러한 경우 사용중인 언어 및 OS로 변환 됨). - 여유 공간이없는 디스크의 파일을 참조하는 표준 출력.
- 연결 종료를 이미 닫은 다른 프로그램에 연결하는 표준 출력.
최소한 다음과 같은 경우를 성공으로 취급해야합니다 (예 : 오류가 아님).
- 표준 출력은 터미널에 연결되고
Hello, world!
화면에 표시됩니다. - 표준 출력은 파일에 연결되어 파일에
Hello, world!
기록됩니다.
위의 규칙과 일치하는 한 출력 오류로 간주되는 세부 정보를 선택할 수 있습니다.
- 표준 출력이 존재하지 않습니다 (즉
위에 나열된 오류 상황이 발생하면 프로그램 / 기능이 충돌하지 않아야합니다. 사용하는 종료 코드는 사용자에게 달려 있습니다.
프로그램 / 기능은 표준 오류 스트림에서 발생한 오류의 특성을 설명해서는 안됩니다. 위에 지정된 문자열 만 인쇄해야합니다. 표준 오류에 대한 외부 출력 (예 : 컴파일러 경고)은 오류 발생 여부에 관계없이 무조건 생성되는 경우에만 유효합니다.
귀하의 프로그램은 하나의 운영 체제에서만 작동해야합니다 (위에 나열된 오류가 의미가있는 것이어야하지만 대부분의 멀티 태스킹 소비자 운영 체제에서 작동 할 수 있도록 일반적으로 유지하려고 노력했지만 이상한 운영 체제는 잘 작동 할 수 있습니다 이 과제에서 제외됨). 프로그램을 이식 할 수없는 경우 제출 제목에 실행해야하는 가정을 나열하십시오.
이 작업은 모든 언어에서 가능하지 않을 수 있습니다 (모든 언어가 프로그램이 사용자 정의 방식으로 출력 오류를 처리하도록 허용하는 것은 아닙니다). 가능한 언어를 선택해야합니다.
프로그램 / 기능이 작동하는지 확인하십시오! 그들이하는 말을하기 위해 라이브러리 함수의 문서를 신뢰하지 마십시오. 간단한 출력 함수의 오류 처리는 이론적으로 함수가 오류를 처리한다고 주장하더라도 실제로 실제로 깨지는 것으로 판명됩니다.
테스트 사례
bash
Linux에서 위의 각 오류 조건을 시뮬레이션하는 방법은 다음과 같습니다 (Linux를 사용할 필요는 없지만이를 테스트하는 가장 쉬운 시스템 일 것입니다).
your_program_here >&- # nonexistent stdout
your_program_here > /dev/full # out of disk space
mkfifo test # note: change "test" to a filename that isn't in use
true < test &
your_program_here > test # connecting to a program that doesn't want input
rm test # clean up the FIFO we used earlier
처음 두 테스트 케이스는 결정적입니다. 마지막은 아니다 (경쟁 조건에 의존한다); 테스트 목적으로, 경쟁 조건이 오류를 노출시키는 방식으로 해결 될 수 있도록 프로그램 시작과 실제 출력 사이에 지연을 추가하는 것이 좋습니다.
승리 조건
이것은 코드 골프도전, 그래서 짧을수록 좋습니다. (거의) 항상 그렇듯이 우리는 프로그램의 길이를 바이트 단위로 측정하고 있습니다.
sleep 1 < test; (sleep 2; your_program_here) > test
있습니까?