我正在尝试使用一台服务器和一台客户端设置FIFO管道。
./client "the fox"
buffer has PID 14491 and content the fox
./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
请咨询您的意见。
答案 0 :(得分:0)
您的struct buffer
在其成员中包含一个指针。这没关系,但你需要认识到,无论指向什么,不都是struct
的一部分,而指针本身最多 无效在管道的另一端。您有两个主要的选择:
给你的struct
数组成员而不是指针成员:
typedef struct buffer {
int pid;
char buffer[20];
} my_buffer;
在编写数据方面要格外小心。例如:
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);
当然,后者必须与相应的读取机制配对。
答案 1 :(得分:0)
听起来不错,但固定缓冲区大小的问题是传输字符串的一小部分或真实字符串到达服务器后的不需要的字符。