使用 system() 在 C 中执行 sudo 命令

2024-01-07

我正在编写一段 C 代码,它将运行一些sudo命令输入system("sudo ip route ...")函数调用。

此调用是在主线程创建的 pthread 中完成的,并且主程序正在执行sudo ./program启动时。

当我运行该程序时,Ubuntu 提示我输入无人密码:

[sudo] password for nobody:

我也尝试过做system("ip route ...")直接但它给了我负回报意味着它没有被执行。

我应该在线程中做什么来允许system()调用以使用sudo从主程序继承的特权?


您无需执行任何特殊操作即可继承 root 权限sudo已经给了你。进程通常会自动继承其父进程的特权。原因system(3)不工作可能是因为你是root(见下文)或者因为你在一个线程上。

话虽如此,不要使用system(3)。这是因为sudo通过使用 setuid 来工作,但这并不能很好地配合system()。因此,使用exec(3)相反,函数族(除了execlp() and execvp()). See man 3 system http://linux.die.net/man/3/system了解更多信息。

现在,与that话虽这么说,不要使用system(3) or exec(3)。相反,只需直接调用 C API 来操作 IP 表即可。当您可以简化程序时,为什么要浪费系统资源来生成一两个新进程呢? (不过,此时您已经到了您的问题属于 Stack Overflow 的地步了)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 system() 在 C 中执行 sudo 命令 的相关文章

随机推荐

  • maxRequestPathLength 不在 ASP.NET 4 文档中并且不起作用

    如果我尝试在 ASP NET 应用程序中使用新的 maxRequestPathLength 设置 它将不起作用 我收到无法识别的属性错误 我尝试过在 IIS 7 中使用 ASP NET Integrated 和 Classic 应用程序池
  • 服务器端的客户端证书验证,DEPTH_ZERO_SELF_SIGNED_CERT 错误

    我正在使用节点 0 10 26 并尝试通过客户端验证建立 https 连接 服务器的代码 var https require https var fs require fs process env NODE TLS REJECT UNAUT
  • R闪亮:彩色文件输入按钮和进度条

    有没有办法上色fileInputR 中的按钮闪亮吗 看起来这是可能的 如此处所示page https github com rstudio shiny pull 602在 github 上 但是我找不到完成此操作的代码 这是一个简单的应用程
  • 尝试在新解决方案中启用 NuGet Package Restore 时出错

    尝试在我刚刚创建的新解决方案中启用包还原时出现错误 VS2012中的错误是 NuGet 包管理器 配置解决方案以还原 NuGet 时出错 构建中的包 无法从路径 NuGet Build 2 7 0 npkg 读取包 我尝试在 VS2010
  • 从日期/时间字符串获取时间

    我有一个日期值存储在变量中 我需要将值的时间部分提取到一个单独的变量中 然后从中添加 减去时间 日期变量使用 date YmdHis 设置 例如 20110805124000 表示 2011 年 8 月 5 日 12 40 00 从值 20
  • PInvoke - 从指针编组结构数组

    我正在尝试遵循以下答案这个问题 https stackoverflow com a 2403083 27494 我的结构在 C 中看起来像这样 typedef struct drive info t unsigned char drive
  • 将 Apache Cordova/PhoneGap 与 Android 2.x 结合使用

    似乎不可能为 Android 2 x 创建 PhoneGap 应用程序 是对的吗 要使用phonegap运行Android应用程序 请将您的应用程序构建为Android 4 0 3 并将最低版本设置为您想要的较低版本 基本上 Android
  • cPanel cron 作业,未指定输入文件?

    我刚刚设置了我的第一个 cron jon 来每晚运行一个股票脚本 手动运行它效果很好 它存储在 admin stock update php中 我正在运行的命令是 usr bin php q admin stock update php 但
  • 如何对类的单个枚举进行 Javadoc

    我正在为一个包含自己的枚举的类编写 Javadoc 有没有办法为各个枚举生成 Javadoc 例如 现在我有这样的事情 This documents HairColor private static enum HairColor BLACK
  • 从方法返回泛型类型的实例

    我想要一个方法getInstance它接受一个字符串值并返回一个对象实例 在方法签名中定义为泛型 def getInstance T dataStr String Option T T match case typeOf String gt
  • Avro 模式中的多态性和继承

    是否可以编写一个 Avro 模式 IDL 来生成一个扩展基类或实现接口的 Java 类 生成的 Java 类似乎扩展了org apache avro specific SpecificRecordBase 因此 工具可能是一条出路 但是 我
  • 由矩形组成的形状最少有多少个矩形?

    我不确定是否有算法可以解决这个问题 将给定数量的矩形从左到右水平并排放置以形成一个形状 您将获得每个的宽度和高度 您如何确定覆盖整个形状所需的最小矩形数量 即 您将如何使用尽可能少的矩形重新绘制该形状 我只能考虑尝试挤压尽可能多的大矩形 但
  • 有没有办法区分 iPhone 3G/S 访问者和 iPhone 4 访问者?

    我想为 iPhone 4 用户加载更高分辨率的图片 但我知道检测用户的唯一方法是通过用户代理 但我的印象是任何 iOS4 手机上的 MobileSafari 用户代理都是一样的 我该怎么做才能检测到 iPhone 4 您可以使用 CSS3
  • 如何使用 java 和 xmlunit 比较具有相同命名空间但不同前缀的两个 xml

    我有 2 个 xml 文件 问题出在属性前缀中
  • 水平 ListView Xamarin.Forms

    有什么办法可以创建ListView with horizontal scroll in Xamarin Forms喜欢图像 这就是我为垂直所做的 var myListView new ListView ItemTemplate new Da
  • 在同一端口上运行两个 Web 应用程序?

    我们有两个不同的 Java Web 应用程序 名为 foo war 和 bar war 我们希望将它们部署在 Jetty 服务器上 Jetty 正在机器上的 8080 端口上运行 是否可以在同一端口上同时运行两个应用程序 如果没有 在同一码
  • 单击通知即可转到当前活动

    我正在使用这个解决方案 如何使通知意图恢复而不是制定新意图 https stackoverflow com questions 3305088 how to make notification intent resume rather th
  • JMS消息大小

    我目前正在研究使用 JMS 即 Spring 框架 JMS 和 Active MQ 在服务器和客户端之间发送有效负载消息的应用程序的带宽限制功能 不要问我为什么 这不是我的决定 我发现了很多限制传入 JMS 消息的方法 但没有一个基于实际带
  • 合并两个具有相同列名的数据框

    我有两个具有这种格式的 data frame 这是数据集的一小部分 数据框1 ID precip lat lon 1 45 115 122 5 2 42 5 130 122 5 3 40 155 122 5 4 37 5 140 122 5
  • 使用 system() 在 C 中执行 sudo 命令

    我正在编写一段 C 代码 它将运行一些sudo命令输入system sudo ip route 函数调用 此调用是在主线程创建的 pthread 中完成的 并且主程序正在执行sudo program启动时 当我运行该程序时 Ubuntu 提