用于删除mailq消息的C代码

时间:2012-04-27 06:36:37

标签: c linux shell

目前我正在使用shell脚本删除mailq消息。我想总结帮助将该shell脚本转换为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。

1 个答案:

答案 0 :(得分:0)

您可以使用“system”函数运行shell命令,包括管道。它将使用默认的系统shell,它可能是你的系统上的ksh,也可能不是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")

你需要弄清楚如何在那里编织$ WORKFILE - 这应该是微不足道的,使用snprintf()来构造命令字符串。您可以使用getenv()来查找值。