#include #include #include #include #include #include int main () { const char *old = "/tmp/mysocket"; const char *new = "/tmp/newsocket"; const char *bad = "/tmp/newsocket.lnk"; struct sockaddr_un addr; int fd; if (unlink (old) == -1 && errno != ENOENT) { perror ("unlink"); exit (1); } if (unlink (new) == -1 && errno != ENOENT) { perror ("unlink"); exit (1); } if (unlink (bad) == -1 && errno != ENOENT) { perror ("unlink"); exit (1); } memset (&addr, 0, sizeof (struct sockaddr_un)); addr.sun_family = AF_UNIX; strncpy (addr.sun_path, old, sizeof (addr.sun_path) - 1); fd = socket (AF_UNIX, SOCK_STREAM, 0); if (fd == -1) { perror ("socket"); exit (1); } if (bind (fd, (struct sockaddr *) &addr, sizeof (struct sockaddr_un)) == -1) { perror ("bind"); exit (1); } if (rename (old, new) == -1) { perror ("rename"); exit (1); } exit (0); }