【问题标题】:C code for deleting mailq messages删除mailq消息的C代码
【发布时间】:2012-04-27 06:36:37
【问题描述】:

目前我正在使用 shell 脚本来删除 mailq 消息。我需要 sum 帮助将该 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。

【问题讨论】:

  • 你为什么要把它转换成C,你有什么尝试?你被困在哪里了?
  • 谢谢 Mat 问题在于 setuid 我想在 C 中使用这个,因为我想给用户 root 权限,并且因为 C 编译成二进制。目前我尝试从 c 程序调用这个脚本
  • 这可能是将某些内容转换为 C 的最糟糕的原因。保留您的脚本,限制权限,并使用 sudo
  • 如果我从 C 调用该脚本并在已编译的二进制文件中使用 chown 设置 setuid,它就可以工作。但我需要 C 中的全部内容。
  • 好吧,开始编码吧。当您遇到特定问题时,请在此处提问。

标签: c linux shell


【解决方案1】:

您可以使用“系统”功能来运行 shell 命令,包括管道。它将使用默认的系统 shell,它在您的系统上可能是也可能不是 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() 来查找值。

【讨论】:

    猜你喜欢
    • 2018-05-05
    • 2014-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    • 2018-06-29
    • 1970-01-01
    • 2021-02-10
    相关资源
    最近更新 更多