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

mac2024-03-31  37

文章目录

前言正文1 linuxc操作cmd2 权限问题

前言

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

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

正文

1 linuxc操作cmd

技术验证 参考这篇 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)