C LANAGUE GET IP OF LOCAL MACHINE

来源:互联网 发布:麻瓜编程 python 视频 编辑:程序博客网 时间:2024/06/10 01:41

#include <stdio.h>
#include <stropts.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <linux/netdevice.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <unistd.h>

int print_addresses(const int domain)
{
  int s;
  struct ifconf ifconf;
  struct ifreq ifr[50];
  int ifs;
  int i;

  s = socket(domain, SOCK_STREAM, 0);
  if (s < 0) {
    perror("socket");
    return 0;
  }

  ifconf.ifc_buf = (char *) ifr;
  ifconf.ifc_len = sizeof ifr;

  if (ioctl(s, SIOCGIFCONF, &ifconf) == -1) {
    perror("ioctl");
    return 0;
  }

  ifs = ifconf.ifc_len / sizeof(ifr[0]);
  printf("interfaces = %d:\n", ifs);
  for (i = 0; i < ifs; i++) {
    char ip[INET_ADDRSTRLEN];
    struct sockaddr_in *s_in = (struct sockaddr_in *) &ifr[i].ifr_addr;

    if (!inet_ntop(domain, &s_in->sin_addr, ip, sizeof(ip))) {
      perror("inet_ntop");
      return 0;
    }

    printf("%s - %s\n", ifr[i].ifr_name, ip);
  }

  close(s);

  return 1;
}

int main(int argc, char *argv[])
{
  //int domains[] = { AF_INET, AF_INET6 };
  int domains[] = { AF_INET };
  int i;

  for (i = 0; i < sizeof(domains) / sizeof(domains[0]); i++)
    if (!print_addresses(domains[i]))
      return 1;

  return 0;
}

 

ALL: test.o
test.o: test.c
        gcc -Wall -g -o test test.c
.PHONY: clean
clean:
        -rm test.o
        -rm test

 

--AIX version

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>

int
lookup_host (const char *host)
{
  struct addrinfo hints, *res;
  int errcode;
  char addrstr[100];
  void *ptr;

  memset (&hints, 0, sizeof (hints));
  hints.ai_family = PF_UNSPEC;
  hints.ai_socktype = SOCK_STREAM;
  hints.ai_flags |= AI_CANONNAME;

  errcode = getaddrinfo (host, NULL, &hints, &res);
  if (errcode != 0)
    {
      perror ("getaddrinfo");
      return -1;
    }

  printf ("Host: %s\n", host);
  while (res)
    {
      inet_ntop (res->ai_family, res->ai_addr->sa_data, addrstr, 100);

      switch (res->ai_family)
        {
        case AF_INET:
          ptr = &((struct sockaddr_in *) res->ai_addr)->sin_addr;
          break;
        case AF_INET6:
          ptr = &((struct sockaddr_in6 *) res->ai_addr)->sin6_addr;
          break;
        }
      inet_ntop (res->ai_family, ptr, addrstr, 100);
      printf ("IPv%d address: %s (%s)\n", res->ai_family == PF_INET6 ? 6 : 4,
              addrstr, res->ai_canonname);
      res = res->ai_next;
    }

  return 0;
}

int
main (int argc, char *argv[])
{
  if (argc < 2)
    exit (1);
  return lookup_host (argv[1]);
}

 

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <time.h>

int main()
{
        pid_t pid, ppid;
        gid_t gid;

        /* get the process id */
        if ((pid = getpid()) < 0)
        {
           perror("unable to get pid");
        }
        else
        {
           printf("The process id is %d\n", pid);
        }

        /* get the parent process id */
        if ((ppid = getppid()) < 0)
        {
           perror(" unable to get the ppid");
        }
        else
        {
            printf(" The parent process id is %d\n", ppid);
        }

        /* get the group process id */
        if ((gid = getuid()) < 0)
        {
             perror(" unable to get the group id ");
        }
        else
        {
             printf(" The group id is %d \n", gid);
        }

        sleep (100);
        return(0);
}

http://www.cs.utah.edu/dept/old/texinfo/glibc-manual-0.02/library_23.html
 

int main (int argc, char *argv[])
{
  int status;
  pid_t pid;
  char command[100];
  strcpy(command,"sleep 60");

  pid = fork ();
  printf("The Child PID is '%d'\n",pid);
  if (pid == 0)
    {
      /* This is the child process.  Execute the shell command. */
      execl (SHELL, SHELL, "-c", command, NULL);
    }
  else if (pid < 0)
    /* The fork failed.  Report failure.  */
    status = -1;
  else
    /* This is the parent process.  Wait for the child to complete.  */
    /*if (waitpid (pid, &status, 0) != pid)
      status = -1;*/
   ;
  return status;
}

原创粉丝点击