unix 域套接字的临时文件
Temporary file for unix domain socket
我为 unix 域套接字创建临时文件。
int fd;
char sf[] = {"/tmp/socket-XXXXXX"};
if ((fd = mkstemp(sf)) == -1)
exit(SOCKFERR);
close(fd);
Buf 当我将地址分配给套接字时,我需要删除此文件(bind()
函数仅在套接字文件尚不存在的情况下才有效)。
int sfd;
struct sockaddr_un addr;
if ((sfd = socket(PF_UNIX, SOCK_STREAM, 0)) == -1)
exit(SOCKERR);
unlink(sf);
memset(&addr, 0, sizeof(struct sockaddr_un));
addr.sun_family = AF_UNIX;
snprintf(addr.sun_path, 108, sf); /* 108 is length of add.sun_path */
if (bind(sfd, (struct sockaddr *) &addr, sizeof(struct sockaddr_un)) != 0)
exit(BINDERR);
如何为 unix 域套接字创建临时文件而不在 bind()
之前删除它?
How can I create temporary file for unix domain socket without removing it before bind()?
这是不可能的。 linux 中的所有内容都是一个文件。 "Socket" 是一个 "socket file"。使用 mkstemp
您可以创建所谓的 "regular file" 或 "normal file".
如果您创建一个常规文件并尝试创建一个具有相同路径的目录,您将收到错误 EEXISTS。你必须远程文件,然后创建一个目录。
当您尝试创建一个与现有常规文件同名的套接字文件时,会发生完全相同的情况 - 该文件已经存在。当您尝试创建符号 link 或硬 link 或 "character device" ("character special file") 或任何其他文件类型时。您必须删除先前存在的文件,然后创建其他文件类型。
我为 unix 域套接字创建临时文件。
int fd;
char sf[] = {"/tmp/socket-XXXXXX"};
if ((fd = mkstemp(sf)) == -1)
exit(SOCKFERR);
close(fd);
Buf 当我将地址分配给套接字时,我需要删除此文件(bind()
函数仅在套接字文件尚不存在的情况下才有效)。
int sfd;
struct sockaddr_un addr;
if ((sfd = socket(PF_UNIX, SOCK_STREAM, 0)) == -1)
exit(SOCKERR);
unlink(sf);
memset(&addr, 0, sizeof(struct sockaddr_un));
addr.sun_family = AF_UNIX;
snprintf(addr.sun_path, 108, sf); /* 108 is length of add.sun_path */
if (bind(sfd, (struct sockaddr *) &addr, sizeof(struct sockaddr_un)) != 0)
exit(BINDERR);
如何为 unix 域套接字创建临时文件而不在 bind()
之前删除它?
How can I create temporary file for unix domain socket without removing it before bind()?
这是不可能的。 linux 中的所有内容都是一个文件。 "Socket" 是一个 "socket file"。使用 mkstemp
您可以创建所谓的 "regular file" 或 "normal file".
如果您创建一个常规文件并尝试创建一个具有相同路径的目录,您将收到错误 EEXISTS。你必须远程文件,然后创建一个目录。
当您尝试创建一个与现有常规文件同名的套接字文件时,会发生完全相同的情况 - 该文件已经存在。当您尝试创建符号 link 或硬 link 或 "character device" ("character special file") 或任何其他文件类型时。您必须删除先前存在的文件,然后创建其他文件类型。