2013-12-10 5 views
1

사용자로부터 C/C++ 소스 파일을 가져 가고 싶습니다. 그런 다음 linux에서 gcc 명령을 사용하여 실행 파일을 만듭니다. 그런 다음이 실행 파일에 입력을 제공하고 출력을 다른 파일로 리디렉션합니다. 그리고 나는 잘못되거나 정확한 대답에 관한 결정을 내리기 위해 생산 된 출력을 점검 할 샘플 출력 파일을 가지고 있습니다. 한마디로 나는 온라인 판사를 wesite로 만들고 싶다.온라인 C/C++ 컴파일러 만드는 법은 무엇입니까?

하지만 사용자가 제공 한 무한 루프 문제를 처리하는 방법을 모르겠어요. 마찬가지로 사용자가 다음 코드를 제출하도록하십시오.

while(1){ 

} 

나는 더 많은 위협이있을 것이라고 알고 있지만 어떻게 이러한 문제를 처리 할 수 ​​있습니까? 나는 사람들이 uva 온라인 판사 또는 다른 사람들과 같은 온라인 판사 웹 사이트를 만드는 방법을 알고 싶다. 누구든지 나를 도와주세요. 웹 사이트를 판단하는 코드에 대한

+3

프로그램을 실행하는 데 최대 시간을 만드는 방법은 어떻습니까? 15 초 이내에 완료되지 않으면 프로그램을 강제로 종료하십시오. – abelenky

+3

고정 된 시간 제한을 설정하지 않으면 중단 문제의 결정 불가능 성은 어떤 경우에도 당신을 물 것입니다. – bitmask

+0

는 그래, 난 그런 일을하고 싶지 ..하지만 난 그렇게 어떻게 .. 나는 그것의 실행 @bitmask에 대한 시간 제한을 설정하는 방법 – user2958359

답변

1

? 그것은 아주 순진한 해결책이지만, 엄격한 시간 제한이 지정되어있는 경우 timeout 명령을 사용하여 얻을 수 있습니다. 설치하고 컴파일 된 프로그램을 실행하면됩니다.

+0

당신은 저에게 말하거나 과정을보다 효율적으로 만드는 어떤 힌트를 주실 수 있습니까? 나는이 점에 정말로 도움이 필요하다. – user2958359

+0

타임 아웃 그 자체는 오버 헤드가 적고 효율적이지만, timeout'ing만으로는 처리되지 않는 신뢰할 수없는 코드를 실행할 때 걱정할 다른 것들이 많이 있기 때문에 순진하다는 것을 의미했습니다. 비트 마스크의 대답과 같은 문제.시간 초과는 더 큰 솔루션의 일부가 될 수 있으며 언급 한 특정 사례를 처리 할 수 ​​있지만 해결해야 할 다른 문제가 있습니다. – EPB

+0

ok thanx 내가 그것을 가지고 – user2958359

2

보십시오 here, 기본적으로 당신이해야 할 일은 타임 아웃을 설정하는 것입니다. 시간 초과가 만료되면 실행 파일을 실행중인 프로세스가 종료됩니다.

완전히 옳다 @bitmask를 대응하기 위해 보안 문제입니다. 그러나 샌드 박스를 만들고 훌륭한 권한을 할당함으로써 단계를 밟을 수 있습니다.

1

- 박스 그것. 컴파일을 별도의 프로세스/작업으로 생성하고 N 초 후에 종료하고 적절한 오류를 사용자에게 반환합니다.

4

완전히 정직하게 말하십시오 : Do not.

timeout에 문제가있는 경우 사용자가 서버를 실행할 수있는 모든 악의적 인 코드로 인해 엄청난 보안 허점을 갖게됩니다. ideone.com에있는 사람들이 악의적 인 코드를 어떻게 처리하는지 알 수는 없지만 사소하지는 않습니다.

휠을 다시 발명하는 대신, 기존 사이트 중 하나를 사용하거나 사람이 코드의 온건성을 점검하십시오 (어떤 종류의 질문에 대한 제출 인 경우).

조금 후에 기본 프로세스를 종료하더라도 아무도 백그라운드 프로세스를 시작할 수 없으며 기쁘게하는 동안 비트 코인을 시작 (예 :) 할 수 없습니다.

+0

그래서 내 자신의 웹 사이트를 만들기 위해 자신의 컴파일러를 사용할 수있는 모든 사이트가 무엇입니까 ?? – user2958359

+0

codepad.org, ideone.com 및 pastebin.com (그 순서대로) 또는 google을 통해 더 많은 서비스를 요청하십시오.하지만 저는 즉시 사용 가능한 웹 컴파일러 인터페이스를 찾을 수 있을지 회의적입니다. – bitmask

관련 문제