在C中通过FIFO管道指针的结构

时间:2015-04-28 20:00:26

标签: c arrays pointers pipe

我正在尝试使用一台服务器和一台客户端设置FIFO管道。

client.c

./client "the fox"
buffer has PID 14491 and content the fox 

server.c

./server 
pid 14491 
Errore di segmentazione

我首先启动服务器,然后启动客户端。特别是,当我用

运行客户端时
loop() {
state = digitalRead(bouton);
  digitalWrite(led, state);
if(state != lastState)
{
  if (state == HIGH) {
    Serial.println("on");
    setRemoteState(5);
  } else {
    Serial.println("off");
    setRemoteState(4);

  }
}
  lastState = state
}

服务器正确显示PID但在打印buf_in->缓冲区时崩溃。

Register-ObjectEvent

请咨询您的意见。

2 个答案:

答案 0 :(得分:0)

您的struct buffer在其成员中包含一个指针。这没关系,但你需要认识到,无论指向什么,都是struct的一部分,而指针本身最多 无效在管道的另一端。您有两个主要的选择:

  1. 给你的struct数组成员而不是指针成员:

    typedef struct buffer {
        int pid;
        char buffer[20];
    } my_buffer;
    
  2. 在编写数据方面要格外小心。例如:

    unsigned buf_size = strlen(buf_out.buffer);
    write(fifo_client, &buf_out.pid, sizeof(buf_out.pid));
    write(fifo_client, &buf_size, sizeof(buf_size));
    write(fifo_client, buf_out.buffer, buf_size);
    
  3. 当然,后者必须与相应的读取机制配对。

答案 1 :(得分:0)

听起来不错,但固定缓冲区大小的问题是传输字符串的一小部分或真实字符串到达​​服务器后的不需要的字符。