设备:树莓派4a ps:吐槽一下它的网口好神奇,网线a可以接通,网线b不可以接通。隔段时间,又反过来,b可以接通,a不可以接通。其实两条网线在别的设备上都能工作,实在是不知道啥情况
树莓派中有一条指令 ifconfig eth0 [ip] 可以用来修改ip,缺陷是需要root权限才能执行 现在试试使用c语言直接操作行不行
在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权限
查了一早上好像没啥解决办法,以下做法在树莓派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