我为unix域套接字创建了临时文件。
int fd;
char sf[] = {"/tmp/socket-XXXXXX"};
if ((fd = mkstemp(sf)) == -1)
exit(SOCKFERR);
close(fd);
当我将地址分配给套接字时,我需要删除此文件(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域套接字的情况下创建临时文件?
答案 0 :(得分:1)
如何在unix域套接字之前创建临时文件而不将其删除?
不可能。 linux中的所有内容都是文件。 “套接字”是“套接字文件”。使用mkstemp
,您可以创建所谓的“常规文件”或“普通文件”。
如果创建常规文件并尝试使用相同的路径创建目录,则会收到错误EEXISTS。您必须远程文件,然后创建目录。
当您尝试创建与现有常规文件同名的套接字文件时,情况完全相同-该文件已存在于此文件中。当您尝试创建符号链接或硬链接或“字符设备”(“字符特殊文件”)或任何其他文件类型时。您必须删除现有文件,然后创建其他文件类型。