树莓派4a c语言中修改ip

前言

设备:树莓派4a
ps:吐槽一下它的网口好神奇,网线a可以接通,网线b不可以接通。隔段时间,又反过来,b可以接通,a不可以接通。其实两条网线在别的设备上都能工作,实在是不知道啥情况

树莓派中有一条指令 ifconfig eth0 [ip]
可以用来修改ip,缺陷是需要root权限才能执行
现在试试使用c语言直接操作行不行

正文

1 linuxc操作cmd

  1. 技术验证
    参考这篇
    https://blog.csdn.net/zzj244392657/article/details/92595286

在c语言中操作命令行,是我需要的,这意思是直接调用系统函数吗
int system(const char *cmdstring);

试试,命令行中可以执行echo,比如

$ echo 123
123

所以编写程序:

int main(){
   system("echo 123");
   return 0;
}

编译运行,正确输出了结果123

2)编写程序

int main(){
   system("ifconfig");
   return 0;
}

运行,可以查看到ip信息,当前eth0 ip为自动分配的 10.0.230.104
编写程序修改它

int main(){
   system("ifconfig eth0 10.0.230.31");
   return 0;
}

运行

SIOCSIFADDR: 不允许的操作
SIOCSIFFLAGS: 不允许的操作

也就是没有root权限

2 权限问题

查了一早上好像没啥解决办法,以下做法在树莓派4b上不起作用

uid_t uid = getuid();                //普通用户的uid
if (setuid(0)) {                     //设置为普通用户和超级用户一样的权限
     ...
}
setuid(uid);    //恢复权限

最后临时方案,用root用户登录,配置方式如下:(仅适用于无桌面系统)

1)设置root用户自动登录
在写开机自起的过程中,发现了这个service,有点lucky。

cd /etc/systemd/system
ls

会发现里面有个autologin@.service
sudo vi autologin@.service
修改ExecStart一行中 --autologin pi ,改为 --autologin root

2)设置树莓派启动选项
sudo raspi-config
设置boot options
设置Desktop/CLI
选中B2 Console Autologin Text console,automatically logged in as ‘root’ user
(如果没有第一步,这里将显示’pi’ user)

3)reboot

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值