2011-01-27 8 views
0

나는 C의 초보자이다. 나의 최종 목표는 Apache 사용자 계정의 crontab을 JSON으로 반환하는 Apache 모듈을 만드는 것입니다.아파치 모듈에서 리눅스 시스템을 출력하는 C 코드

아기가 먼저 단계.

: 나는 성공적 아파치 모듈에서 "세계 안녕하세요"출력에 다음 두 위치에서 자습서와 그 변화 (내가 실제로 닉 큐의 책을 소유)을 따랐습니다

I 출력 JSON에 약간의 예제를 수정 한 다음과 같이 내가 좋아하는 것

ap_rputs("{'hello': {'to': 'world', 'from': '?'}}", r); 

가 대체 할 '를?' 리눅스 시스템의 'whoami'명령 출력 (결국 리눅스 명령 'crontab -lu username'을 실행하고 싶습니다. C 초보자로서 나는 이것에 대해 어떻게 할 것인지에 대한 선택에 압도 당하고 있지만, 나는 몇 가지 시도를 해왔고, 무엇인가를 올바르게 얻는 것에 가깝지 않은 것처럼 보인다. 나는 함정에 WHOAMI의 출력 수있을 것 않거나, 적어도 내 코드 실행을 컴파일)

FILE *sysp = popen("whoami","r"); 

을하지만 난 위의 권리를하고 있는가? 그리고 다음 단계는 무엇입니까? 위에서 출력의 길이를 결정한 다음 동일한 길이의 char 배열을 만들고 파일 핸들을 되감기하고 출력을 가져올 수도 있다고 생각했습니다. 그러나 나는 길이를 올바르게 얻는 것 같지 않으며, 아마도 이것은 차선책일까요? 나는 다음을 실행하면 내가 얻을 출력이 -1 (나는, 필요 즉 FCLOSE, 되감기 할 수 알고 라인의 몇 가지를 남겨 두었다) :

fseek(sysp, 0L, SEEK_END); 
long len = ftell(sysp); 
char buf[2]; 
sprintf(buf, "%d", (int)len); 
ap_rputs(buf, r); 

모든 포인터를 구체적으로 어떻게 더 나은 방법에 관해서 시스템 명령 "whoami"의 결과를 출력합니다.

답변

1

이 경우 FILE *은 파이프를 가리키며 실제로 검색 할 수 없습니다. 이상적으로는 외부 프로그램을 호출하는 대신 시스템에서 직접 찾고있는 정보를 얻어야합니다. 나는 getuid()getpwent() 함수들이 여기에 편리 할 것이라고 생각한다. getpwent() 그냥 popen()를 사용하여 방법으로 (차단할 수 있습니다

, 요청에 따라 적어도 하나의 스레드를 사용하지 않는 어떤 MPM과 모듈을 사용하는 것이 안전하지 않습니다.

+0

좋은 점,'ltrace' 생각하지만 – ephemient

+0

예,'geteuid()'는 현재 사용자의 UID를 알아 내는데 사용되며, 그 다음에는 passwd에서 사용자 이름을 검색합니다 (geteuid()는 geteuid()와 getpwuid 데이터베이스 (파일 또는 원격 데이터베이스 일 수 있음) 데이터베이스 조회는 차단할 수있는 비트입니다. –