|
最后, 我使用的一个如下的程序, 其思路是: 在子进程中调用exec执行/sbin/ifconfig, 在父进程中调用wait()获得子进程的退出状态, 如果可以找到ppp0, 退出状态为0, 否则为1, 这样就可以在程序中检测了.
- /*
- * Program: li.c
- * Lookup Interface.
- *
- * Version: Just a test program.
- *
- * Author: Zhou Peng
- * <Chowroc@163.com; OICQ:281141985; ICQ:269464589>
- * Copyright 2004
- *
- * Time: 2004.7.29
- *
- * This program is free software under the GNU General Public License.
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <sys/types.h>
- #include <sys/wait.h>
- #include <unistd.h>
- #include <string.h>
- int main(int argc, char *argv[])
- {
- pid_t pid;
- int status;
- if(argc != 2) {
- printf("usage: li INTERFACE_NAME_TO_LOOKUP(eth0/ppp0/...)\n");
- exit(0);
- }
- if(!strcmp(argv[1], "-h") || !strcmp(argv[1], "--help")) {
- printf("usage: li INTERFACE_NAME_TO_LOOKUP(eth0/ppp0/...)\n");
- exit(0);
- }
- if((pid = fork()) < 0) {
- fprintf(stderr, "fork error!\n");
- exit(1);
- }
- else if(pid == 0) { // child.
- if(execlp("/sbin/ifconfig", "ifconfig", argv[1], (char *) 0) < 0) {
- fprintf(stderr, "execlp error!\n");
- exit(1);
- }
- }
- if(wait(&status) != pid) {
- fprintf(stderr, "wait error!\n");
- exit(1);
- }
- if(WIFEXITED(status))
- printf("normal termination, exit status = %d\n", WEXITSTATUS(status));
- else if(WIFSIGNALED(status))
- printf("abnormal termination, signal number = %d\n", WTERMSIG(status));
- else if(WIFSTOPPED(status))
- printf("child stopped, signal number = %d\n", WSTOPSIG(status));
- exit(0);
- }
复制代码
在我的计算机上这样做是可以的. 我现在的问题是, 我试用eth0接口, 发现无论是其处于down或 up的状态, 都返回0. 那么在其他计算机上, ppp0接口是不是也会有这样的问题呢?
我在LFS下重新编译过内核, 似乎没有这个问题, 但不确切知道.
另外, ifconfig如何检测 eth0 的状态是up/down呢?
谢谢 |
|