[완료] cgi 에서 실행가능한 프로그램을 돌리게 하는 방법이 없나요?
아래 올렸던 질문인데 답을 아직 못 찾고 있어 이렇게 추가된 질문과 함께 글을 올립니다.
--------------------------------------------------------------------------
C로 cgi를 짜고 있습니다.
fill out form 에서 input으로 쿼리 스트링을 받아서
입력된 값만 가져와서 그 값으로 구글에서 검색된 결과 url주소로 만들고
그걸 이용해서 구글 검색결과 html 을 받아 오고 다시 웹브라우져에 일부분 출력하고 싶습니다.
cgi 를 이용하지 않고 C로 바로 돌리면(execlp사용) html 파일 저장되는 것을 확인 했습니다.
그런데 cgi를 통해서 하면 에러가 나네요ㅠ_ㅠ
고수님들의 좋은 방법과 방향 제시 부탁드립니다.
혹시 cgi 에서 exec 나 system 함수 사용하기 위해 바꿔 줘야 하는 환경설정등이 있나요?
---------------------------------------------------------------------------
라고 글을 올렸었구요. 고민하다가 생각해 낸 방법으로 유닉스에서 c로 짠 프로그램을 수행 시키면
html파일을 잘 가져오길래 이렇게 가능한 파일을 하나 만들어 놓고
cgi 프로그램이 위 실행 파일을 수행할 수 있는지 방법도 생각해 보았습니다.
가능한 방법이 없을까요?
system("./a.out");
이런식으로 호출하면 될 것 같았는데, 그 결과는 나타나지 않더군요, 혹은 인터널 에러 ㅠ_ㅠ
cgi로는 이것이 불가능 한 걸까요?
php나 asp를 공부해서 하는것이 지금 고생하는 것 보다 빠르려나요?
도움 부탁드립니다.
CGI로 실행한다는
CGI로 실행한다는 것은, HTTP daemon이 실행한다는 뜻입니다. 따라서 직접 실행했을 때와, CGI로 실행될 때와 프로세스 소유자(effective user ID)가 다릅니다.
프로그램에서 파일을 저장한다고 말하셨는데, CGI로 실행했을 때, 아마도 저장할 위치에 대한 권한이 없어서 저장이 안 된 것이 아닌가 합니다.
일단 저장을 /tmp와 같이 아무나 읽고 쓸 수 있는 공간에 해 보고, 된다면 프로그램은 이상 없는 것입니다. 이 후에, (저장할 공간에) HTTP daemon이 읽고 쓸 수 있는 권한을 주면 됩니다. 아니면 CGI 프로그램에 setuid bit을 설정하는 것도 괜찮습니다.
자세한 것은 man chmod, 더 자세한 것은 info libc user를 참고하기 바랍니다.
--
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://www.cinsk.org/cfaqs/
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
혹시나 싶어서..
혹시나 싶어서.. 드리는 말씀인데.
결과를 출력할때, http헤더는 넣어 주셨나요?
이부분이 가장 첫줄에 들어 가야 합니다.
댓글 달기