2012-04-27 2 views
0

현재 셸 스크립트를 사용하여 mailq 메시지를 삭제하고 있습니다. 쉘 스크립트를 C 코드로 변환하는 데 도움이 필요합니다. 모든 예제 또는 도움을 주시면 감사하겠습니다. 나는 그것을하기위한 기본적인 방향을 원한다. mailq 메시지를 삭제하기위한 C 코드

이 현재 코드 내가 사용하고

:

#!/usr/bin/ksh 
WORKFILE="/tmp/check.mq" 
MAILLIST="emailadress" 

mailq|grep -B1 -i temporarily |grep -iv deferred |egrep -i 'jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec' |awk -F" " '{print $1}' |awk '{print substr($0,10,14)}' |tee -a $WORKFILE |awk '{print "*" $1}' |tee -a mail.mq 
mailq|grep -B1 -i unknown|egrep -i 'jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec' |awk -F" " '{print $1}' |awk '{print substr($0,10,14)}' |tee -a $WORKFILE |awk '{print "*" $1}' |tee -a mail.mq 
mailq|grep -B1 -i lookup |grep -iv deferred |egrep -i 'jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec' |awk -F" " '{print $1}' |awk '{print substr($0,10,14)}' |tee -a $WORKFILE |awk '{print "*" $1}' |tee -a mail.mq 

cat mail.mq | while read file; do rm -rf /var/spool/mqueue/$file;done 
rm -rf mail.mq 

기본적으로 내가 메시지 ID의 마지막 5 개 숫자의 문자열을 사용하여 내 mailid에 그 ID를 삭제하는 것보다 그것을 보낸다.

+0

왜 이것을 C로 변환 하시겠습니까? 그리고 무엇을 시도 했습니까? 어디서 붙어 있니? – Mat

+0

Thanks Mat 문제는 setuid와 관련이 있습니다. 사용자에게 루트 권한을 부여하고 C가 바이너리로 컴파일되기 때문에 C에서 이것을 원합니다. 현재 C 프로그램에서이 스크립트를 호출 해 보았습니다 –

+1

아마도 C로 변환하는 가장 나쁜 이유입니다. 스크립트를 제한된 권한으로 유지하고'sudo'를 사용하십시오. – Mat

답변

0

"시스템"기능을 사용하여 파이프 라인을 포함한 셸 명령을 실행할 수 있습니다. 시스템의 ksh 일 수도 있고 아닐 수도있는 기본 시스템 셸을 사용하지만 문제가되지 않을 수도 있습니다. 문제가 발생하면 명령 문자열의 시작 부분에 항상 "ksh -c"라고 명시 적으로 말할 수 있습니다. 당신은 거기에 $ 작업 파일을 직조하는 방법을 알아낼 필요가

system("mailq|grep -B1 -i temporarily |grep -iv deferred |egrep -i 'jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec' |awk -F" " '{print $1}' |awk '{print substr($0,10,14)}' |tee -a $WORKFILE |awk '{print "*" $1}' |tee -a mail.mq") 

-이 먼저 명령 문자열을 구성하기 위해 현재 snprintf()를 사용하여 사소한해야합니다. getenv()를 사용하여 값을 찾을 수 있습니다.

관련 문제