如何從C程序中設置(並替換現有的)默認網絡路線?如果可能的話,我希望不使用shell命令(這是一個低內存嵌入式系統)。您還可以設置默認路由而不指定網關IP地址?在我的應用程序中,我希望使ppp0或eth0成爲默認路由,具體取決於電纜是否插入到eth0中。Linux:如何設置C的默認路由?
感謝, 弗雷德
如何從C程序中設置(並替換現有的)默認網絡路線?如果可能的話,我希望不使用shell命令(這是一個低內存嵌入式系統)。您還可以設置默認路由而不指定網關IP地址?在我的應用程序中,我希望使ppp0或eth0成爲默認路由,具體取決於電纜是否插入到eth0中。Linux:如何設置C的默認路由?
感謝, 弗雷德
您可以通過IOCTL調用來設置C程序的默認路由。
void main()
{
int sockfd;
struct rtentry rt;
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd == -1)
{
perror("socket creation failed\n");
return;
}
struct sockaddr_in *sockinfo = (struct sockaddr_in *)&rt.rt_gateway;
sockinfo->sin_family = AF_INET;
sockinfo->sin_addr.s_addr = inet_addr("Your Address");
sockinfo = (struct sockaddr_in *)&rt.rt_dst;
sockinfo->sin_family = AF_INET;
sockinfo->sin_addr.s_addr = INADDR_ANY;
sockinfo = (struct sockaddr_in *)&rt.rt_genmask;
sockinfo->sin_family = AF_INET;
sockinfo->sin_addr.s_addr = INADDR_ANY;
rt.rt_flags = RTF_UP | RTF_GATEWAY;
rt.rt_dev = "eth0";
if(ioctl(sockfd, SIOCADDRT, &rt) < 0)
perror("ioctl");
return;
}
爲什麼你想避免shell命令? –
太間接,可以使用大量的RAM。這是一個小型的嵌入式系統。我編寫了一個系統,但實際上它會崩潰,因爲它使用了太多的內存映射到busybox命令。 –