我为 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);
如何在 bind()
之前为 unix 域套接字创建临时文件而不删除它?
最佳答案
How can I create temporary file for unix domain socket without removing it before bind()?
这是不可能的。 linux 中的一切都是一个文件。 “套接字”是一个“套接字文件”。使用 mkstemp
,您可以创建所谓的“常规文件”或“普通文件”。
如果您创建一个常规文件并尝试创建具有相同路径的目录,您将收到错误 EEXISTS。你必须远程文件,然后创建一个目录。
当您尝试创建一个与现有常规文件同名的套接字文件时,会发生完全相同的情况 - 该文件已经存在。当您尝试创建符号链接(symbolic link)或硬链接(hard link)或“字符设备”(“字符特殊文件”)或任何其他文件类型时。您必须删除先前存在的文件,然后创建其他文件类型。
关于c - unix 域套接字的临时文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55682842/