gpt4 book ai didi

创建替换 stdin 的文件描述符(在 select() 中)

转载 作者:行者123 更新时间:2023-11-30 16:48:55 26 4
gpt4 key购买 nike

考虑到无需键盘输入即可与多客户端 Unix 域套接字进行通信,我想创建一个替换 stdin 的文件描述符。

对于多客户端套接字,您必须将标准输入的文件描述符(为 0,使用 FD_SET(0, &readfds))添加到 readfds以便将键盘输入 (FD_ISSET(0, &readfds)) 发送到服务器。由于我不想每次启动客户端时都进行写入,因此我想用自定义文件描述符替换此文件描述符(通过从另一个程序写入此文件)。

我查看了Create a file descriptor创建两个程序:

写入文件描述符的一个:

int main() {
char buffer[] = "test";
int fd = open("sample.dat", O_WRONLY | O_CREAT, 0666);
dup2(fd, 5);

if(write(5, buffer, 4) < 0)
fprintf(stderr, "write %s\n", strerror(errno));

close(5);
return 0;
}

还有一个从中读取的内容:

int main() {
char buffer[4];
int fd = open("sample.dat", O_RDONLY);
dup2(fd, 5);

for(;;) {
if(read(5, buffer, 4) < 0)
fprintf(stderr, "read %s\n", strerror(errno));

printf("%s\n", buffer);
sleep(1);
}

return 0;
}

我的问题是:是否可以将此文件描述符设置为类似标准输入?我的意思是实际上我的第二个程序无休止地读取“test”,因为(当然)sample.dat 仍然包含“test”,但我想在读取它后将其删除。

最佳答案

是的。您可以为此使用管道:https://linux.die.net/man/2/pipe

或 FIFO:https://linux.die.net/man/3/mkfifo使用 FIFO 将在文件系统中创建一个文件,客户端和服务器进程可以打开该文件进行通信。

关于创建替换 stdin 的文件描述符(在 select() 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42808661/

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