gpt4 book ai didi

c - 命名 PIPE 卡在打开状态

转载 作者:太空宇宙 更新时间:2023-11-04 02:29:48 27 4
gpt4 key购买 nike

我正在尝试实现一个 named PIPE IPC 方法,每次 sendToPipe 函数时,我都会发送 float 值 (10)被调用。这是 sendToPipe 函数 -

int fd;
char *fifoPipe = "/tmp/fifoPipe";

void sendToPipe(paTestData *data){

int readCount = 10;
fd = open(fifoPipe, O_WRONLY); // Getting stuck here

// Reading 10 sample float values from a buffer from readFromCB pointer as the initial address on each call to sendToPipe function.
while(readCount > 0){

write(fd, &data->sampleValues[data->readFromCB], sizeof(SAMPLE)); // SAMPLE is of float datatype
data->readFromCB++;
readCount--;
}

close(fd);

// Some code here
}

我已经在我的 main 中初始化了 named PIPE :

int main(){

// Some code
mkfifo(fifoPipe, S_IWUSR | S_IRUSR);

// Other code
}

我不知道哪里出错了。任何帮助表示赞赏。如果需要任何其他信息,也请告诉我。

最佳答案

总结所有评论点:

  1. 程序正在“卡住”,因为管道的另一端没有读取器。
  2. 在第一个程序启动后,管道就创建好了。下一次程序启动将返回 FILE_EXIST 错误。
  3. 要一次将 10 个值写入管道,使读取器能够一次性接收所有这些值,您应该准备一个缓冲区,然后打开管道并写入(阻塞模式)。作为旁注,请注意阅读器方面:读取函数不会授予一次性检索整个缓冲区的权限,因此您必须检查返回的读取数据编号。

关于c - 命名 PIPE 卡在打开状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44942572/

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