다음 기능을 가진 프로그램 또는 기능을 작성하십시오.
- 프로그램 / 함수는 먼저 문자열
Hello, world!을 표준 출력 스트림 에 쓰려고 시도 합니다. (프로그램 자체의 사소한 행동보다는 I / O에 중점을두기 때문에이 과제에 다른 형식의 출력을 사용할 수 없습니다.) 성공 여부에 따라 :- 출력에 성공
Hello, world!하면 추가 동작없이 프로그램 / 기능이 종료됩니다. - 오류로 인해 올바른 출력을 생성하지 못한 경우 프로그램 / 기능은 문자열
Error writing "Hello, world!"을 표준 오류 스트림 에 쓰려고 시도 합니다. (이 도전의 목적으로, 오류 처리 자체를 위해 오류 처리가 필요하지 않습니다.)
- 출력에 성공
설명
프로그램 / 기능은 입력없이 실행됩니다 (입력이 작동해야하는 언어로 작성되지 않은 경우 가장 간단한 입력으로 실행 됨).
출력을 생성 할 때 원하는 경우 단일 후행 줄 바꿈을 생성 할 수도 있지만 그렇게하는 것이 필수는 아닙니다.
프로그램이 구현하는 "표준 출력에 오류 쓰기"의 정의는 최소한 다음 경우를 오류로 처리해야합니다.
- 표준 출력이 존재하지 않습니다 (즉
stdout, 닫힌 파일 핸들이거나 파일 디스크립터 1이 없거나 이러한 경우 사용중인 언어 및 OS로 변환 됨). - 여유 공간이없는 디스크의 파일을 참조하는 표준 출력.
- 연결 종료를 이미 닫은 다른 프로그램에 연결하는 표준 출력.
최소한 다음과 같은 경우를 성공으로 취급해야합니다 (예 : 오류가 아님).
- 표준 출력은 터미널에 연결되고
Hello, world!화면에 표시됩니다. - 표준 출력은 파일에 연결되어 파일에
Hello, world!기록됩니다.
위의 규칙과 일치하는 한 출력 오류로 간주되는 세부 정보를 선택할 수 있습니다.
- 표준 출력이 존재하지 않습니다 (즉
위에 나열된 오류 상황이 발생하면 프로그램 / 기능이 충돌하지 않아야합니다. 사용하는 종료 코드는 사용자에게 달려 있습니다.
프로그램 / 기능은 표준 오류 스트림에서 발생한 오류의 특성을 설명해서는 안됩니다. 위에 지정된 문자열 만 인쇄해야합니다. 표준 오류에 대한 외부 출력 (예 : 컴파일러 경고)은 오류 발생 여부에 관계없이 무조건 생성되는 경우에만 유효합니다.
귀하의 프로그램은 하나의 운영 체제에서만 작동해야합니다 (위에 나열된 오류가 의미가있는 것이어야하지만 대부분의 멀티 태스킹 소비자 운영 체제에서 작동 할 수 있도록 일반적으로 유지하려고 노력했지만 이상한 운영 체제는 잘 작동 할 수 있습니다 이 과제에서 제외됨). 프로그램을 이식 할 수없는 경우 제출 제목에 실행해야하는 가정을 나열하십시오.
이 작업은 모든 언어에서 가능하지 않을 수 있습니다 (모든 언어가 프로그램이 사용자 정의 방식으로 출력 오류를 처리하도록 허용하는 것은 아닙니다). 가능한 언어를 선택해야합니다.
프로그램 / 기능이 작동하는지 확인하십시오! 그들이하는 말을하기 위해 라이브러리 함수의 문서를 신뢰하지 마십시오. 간단한 출력 함수의 오류 처리는 이론적으로 함수가 오류를 처리한다고 주장하더라도 실제로 실제로 깨지는 것으로 판명됩니다.
테스트 사례
bashLinux에서 위의 각 오류 조건을 시뮬레이션하는 방법은 다음과 같습니다 (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있습니까?