现在,我想动态实现ATMEL9200上跑的linux的IP, 前两天在网上看到一段关于通过c程序修改ip的代码,如下: int main(int argc, char *argv[]) { int sockfd; struct ifreq ifr; struct sockaddr_in *sin; if (argc != 3) { fprintf(stderr, "Usage: chip <interface> <IP>\n"); return 1; } if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { perror("socket error"); exit(2); } memset(&ifr, 0, sizeof(ifr)); strncpy(ifr.ifr_name, argv[1], sizeof(ifr.ifr_name)-1); sin = (struct sockaddr_in *)&ifr.ifr_addr; sin->sin_family = AF_INET; if (inet_pton(AF_INET, argv[2], &sin->sin_addr) < 0) { perror("inet_pton error"); exit(3); } if (ioctl(sockfd, SIOCSIFADDR, &ifr) < 0) { perror("ioctl SIOCSIFADDR error"); exit(4); } return 0; } 上面这段程序以Root身份确实可以更改IP,但是以other身份就不行了,不能正确执行。 我查了一边,发现是(ioctl(sockfd, SIOCSIFADDR, &ifr) < 0) 的问题,就是ioctl的问题。
我想问一下,通过什么方法可以更改相关权限,也就是在一般用户下, 也可以实现在超级用户下所做的事情? 比如通过写一个什么样的函数等等。 请高人指点 ,先谢谢你。
[align=right][color=#000066][此贴子已经被作者于2005-4-6 15:38:01编辑过][/color][/align]