2012-04-27 1 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

ありがとうMat 問題はsetuidである私はユーザーにルート権限を与えたいから、Cはバイナリにコンパイルするので、これをCで欲しい。 現在、私はCプログラム –

+1

からこのスクリプトを呼び出そうとしました。おそらく何かをCに変換する最悪の理由です。スクリプトを制限付きのアクセス許可で保持し、 'sudo'を使用してください。 – Mat

答えて

0

"システム"機能を使用して、パイプラインを含むシェルコマンドを実行できます。デフォルトのシステムシェルが使用されますが、これはシステム上でkshであってもなくてもかまいませんが、問題ではないかもしれません。それが問題であれば、コマンド文字列の先頭に常に "ksh -c"と明示的に言うことができます。あなたはそこでの$ WORKFILEを織りする方法を理解する必要があります

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()を使用して値をルックアップできます。

関連する問題