리눅스,C 프로세스 값 전달에 질문이 있습니다(execlp 값)
글쓴이: overflowww / 작성시간: 금, 2016/11/25 - 9:25오후
fork해서 자식프로세스를 execlp를 돌려서 파일을 열려고 합니다
근데 이 파일 출력 결과가 맞는건지 테스트케이스와 비교대조를 하려고 하는데
execlp에서 리턴값을 어떻게 받아서 대조를 하는지 모르겠네요
테스트케이스랑 대조를 해서 값이 일치하면 부모프로세스에선 value += (입력값)을 하려고 하고있습니다.
값 넘기는거는 나중에 해결하면 되는 일인데
execlp 리턴값을 어떻게 테스트케이스랑 비교하는지랑
부모프로세스에서 어떻게 #t #f인지 판별해서 덧셈을 수행해야하는지 감이 잘 안오네요
도움 부탁드립니다.
Forums:
execlp 함수는 성공하면 값을 반환하지 않습니다.
execlp 함수는 성공하면 값을 반환하지 않습니다.
당연하죠. 그게 성공하면 더 이상 돌아올 수 없는데.
혹시 C library의 system 함수와 용례를 헷갈리신 것 아닌가요?
자식 프로세스의 성공/실패 여부만을 돌려받고자 하는 거라면 wait(혹은 waitpid)류 함수로 프로세스의 종료 코드를 받아오는 방식이 정석적이죠.
그 이상의 정보를 받고자 한다면 미리 파이프를 열어둔다던가 등의 방법이 필요합니다.
제가 과제 평가 프로그램을 만들려는데
과제로 제출받은 파일을 돌려보고 출력이 같으면 가점형식으로 가점을 주려고 하는데
execlp가 값을 반환을 안하면... 어떻게 해야할지 모르겠습니다.
성공/실패 여부보다는 출력값을 받아야해서..
파이프를 열어서 자식프로세스로 보내면 되는건가요?
방법은 여러가지죠
과제 조건에 "표준 입력으로 읽고 표준 출력으로 쓸 것"을 명시하고, execlp 전에 표준 입력과 표준 출력을 파이프로 리다이렉트 한다던가,
아니면 출력값을 특정 이름을 가진 파일에 쓰게 만들어서 과제물이 종료된 이후에 그 파일로부터 읽어들인다던가.
개인적으로 전자가 더 깔끔해서 선호합니다. 특히, 그러면 과제 프로그램이 파일을 따로 열어야 할 필요가 없어져서, seccomp(http://man7.org/linux/man-pages/man2/seccomp.2.html) 같은 걸 적용시키기 더 쉽거든요.
말이 나와서 말이지만 setrlimit(https://linux.die.net/man/2/setrlimit)을 걸어놓는 것도 좋은 생각입니다. 누구한테 내신 과제물인지는 모르겠지만 불특정 다수 중에는 반드시 무한루프 같은 걸 내는 사람이 있거든요. -_-;;;
댓글 달기