|
我在做C语言开发的时候,遇到了如下两个问题,可能对大家高手来说不难解决,但对我这个新手来说却折腾了很久还是没有搞定,麻烦大家帮帮我,谢了先。
1、安全关闭系统的问题:
我通过如下代码试图实现关闭和重新启动linux系统,当我运行这个程序的时候,发现系统会立即关闭,并没有关闭各个服务的过程,和在命令行执行shutdown -h now的效果不一样,请问我实现的关机程序安全吗?会丢数据吗?有没有其更好的实现方法?
int main()
{
printf("\nPress r to reboot or p to power off.");
char c = getchar();
sync();
int ret;
if(c=='r')
ret = reboot(RB_AUTOBOOT);
else if(c=='p')
ret = reboot(RB_POWER_OFF);
return ret;
}
2、永久修改本机IP地址的问题:
我运行如下程序的时候,发现本机的IP确实被修改成我想要的IP地址了,但关键是重新启动linux的时候,IP地址又恢复到原来的值,请问有没有办法,只通过C语言编程来实现永久修改本机的IP地址,而不需要手工修改/etc/sysconfig/network-scripts/ifcfg-eth0文件?
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;
} |
|