gpt4 book ai didi

c - unix 域套接字的临时文件

转载 作者:太空宇宙 更新时间:2023-11-04 03:11:43 25 4
gpt4 key购买 nike

我为 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com