2013-03-07 3 views
0

프로그래밍 경쟁을 조직하고 있습니다. 다른 프로그램의 출력 (참가자의 실행 파일)을 문자 단위로 확인하는 프로그램을 만들어야합니다. 요구 사항은 다음과 같습니다.다른 프로그램의 출력을 확인하는 프로그램

  • 프로그램은 platform independent이어야합니다.
  • 참가자의 입력과 올바른 출력을 참가자가 사용할 수 없어야합니다. 모든 참가자는 자신의 프로그램 이름을 검사기로 전달합니다. Checker는 답이 맞는지 아닌지를 알려줍니다.
  • 참가자의 프로그램 결과를 참가자에게 직접 보여줘서는 안되며, 참가자의 프로그램 결과를 기반으로 입력을 파악할 수도 있습니다.

두 번째 부분에서는 입력 및 출력을 어떻게 든 실행 파일 자체에 저장할 수 있습니까? 차라리

이 프로그램은 다음과 같이 작동합니다 .. 조금 불편한 일을합니다 .. 암호화 된 파일에서 읽을 수 없습니다 것 :

checker.exe question1.exe

정답, 축하해!

자원 봉사자에게 보여주십시오.

표준 C 라이브러리의 popenpclose 기능을 사용해 보았습니다.

그러나 문제는 Linux에서 참가자의 프로그램 출력을 보여주는 셸을 열어서 3 번째 요구 사항에 따라 발생하지 않아야한다는 것입니다.

이 작업을 수행하는 간단한 방법은 무엇입니까? 미리 감사드립니다.

편집 :

내가 특별히 참가자들에게 각 질문에 대해 만든 실행 파일을 넘겨해야합니다.

+1

코드가 도움이 될 것입니다. C에서이 작업을 수행 할 필요가 없다고 생각합니다. 간단한 스크립트를 작성해야 할 때 쉘 스크립트가 잘 작동했습니다. 나는 더 이상 그것을 갖지 못했다 (그것은 15 년 전이었다). – Hogan

+0

코드로 작성하고, 데이터베이스에 저장하고, 웹 서버에 저장하고 소켓을 사용하여 요청합니다. 가장 간단한 것은 코드에 저장하는 것입니다. – spartacus

+0

정말 영리한 경쟁자는 화면을 지우고 위에 나온 출력물을 출력하는 프로그램을 작성합니다 ... 어떻게 알 수 있습니까? – Floris

답변

0

예. 정보를 쉘에 저장하는 것이 쉽지 않습니다 ... 단지 파이프 만 사용하십시오.

$ question | checker 
가 작동 아닌지 검사 인쇄 할 수

. 그것은 모두 메모리에서 발생합니다. 당신은 사용자가 자신이 단지 스크립트 파일에이 코드를 넣어 그것을 할 수 있도록하려면 사용자는 실행하고 priv로 읽기 때문에


은 파일을 설정합니다. su로 실행되도록 스크립트를 설정하십시오. 그런 다음 스크립트는 검사를 수행 할 수 있습니다 (검사기를 실행하거나 비교를 수행합니다).비교가 필요한 경우 데이터 파일은 스크립트 외부에있을 수 있으며 사용자는 해당 파일에 대한 권한이 없으므로 데이터를 읽을 수 없습니다.

+0

나는 이것이 실행 가능한 선택이라고 생각한다. 검사기는 단순히 올바른 출력의 해시를 저장하고, 표준 입력에서'question'의 출력을 읽고 (right?) 해쉬를 계산하고 비교합니다. 권리? – Bruce

+0

suid 비트가 설정되어 있든 상관없이 읽기 권한없이 스크립트를 실행할 수는 없습니다. – Tuxdude

+0

물론, 내가 해 냈을 때 나는 해시를 신경 쓸 필요가 없었다. 나는 정확한 파일을 가지고 있었고,'comp'를했다. 내가 권한을 설정했기 때문에 아무도 스크립트를 실행하지 않고도 아무도 읽을 수 없었습니다. – Hogan

0

한 가지 옵션은 사용자가 지정한 공개 키를 사용하여 프로그램 출력을 암호화하도록 사용자에게 요청하는 것입니다. gnupg가 좋은 후보가 될 수 있습니다. 개인 키를 사용하여 출력을 암호 해독하고 비교하십시오.

그렇지 않으면 프로그램의 출력을 일부 파일 (바이너리 또는 텍스트)에 저장하지 않고 데이터의 프라이버시를 손상시키지 않으면 서 어떻게 비교할 수 있는지 명확하지 않습니다.

+0

프로그램의 출력을 해시하고 올바른 출력의 해시와 비교할 수 있습니다. 해독 할 필요가 없습니다! – Floris

+0

@Floris 그래, 내가 해시에 대해 생각하지 않은 이유를 모르겠다! – Bruce

관련 문제