【发布时间】:2014-11-17 21:15:52
【问题描述】:
我有一个 arduino 将温度发送到这个服务器脚本。
你会从代码中得到 jist,但问题是当我在 cli 输出 segmentation error (core dumped) 中收到我的第一条消息,然后 readIn() 和 writeOut() 函数都由同一个进程执行(两者函数与sleep(1) 同步运行,$ps aux 下也只有 1 个进程。
#include <unistd.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <fcntl.h>
#include <sys/stat.h>
void writeOut();
void readIn();
int fd[2];
#define MAX_BUF 1024
int main(){
printf("init\n");
/*
fd[0] = read descriptor
fd[1] = write descriptor
*/
int value = 0;
pipe(fd);
int pid = fork();
if(pid == 0){
/* parent process */
readIn();
} else{
/* child process */
writeOut();
}
}
void writeOut(){
char * value = 'start';
while(1){
read(fd[0], &value, MAX_BUF);
printf("%s\n", value);
}
}
void readIn(){
char str[100];
int listen_fd, comm_fd;
struct sockaddr_in servaddr;
listen_fd = socket(AF_INET, SOCK_STREAM, 0);
bzero( &servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htons(INADDR_ANY);
servaddr.sin_port = htons(8080);
bind(listen_fd, (struct sockaddr *) &servaddr, sizeof(servaddr));
listen(listen_fd, 10);
comm_fd = accept(listen_fd, (struct sockaddr *) NULL, NULL);
while(1){
bzero( str, 100);
read(comm_fd, str, 100);
printf("S: %s", str);
write(comm_fd, str, strlen(str)+1);
write(fd[1], &str, sizeof(str));
sleep(1);
}
printf("readIn Exit!");
exit(0);
}
【问题讨论】:
-
pid == 0表示孩子,而不是您的 cmets 建议的父母。 -
你应该检查
pipe()的返回值。此外,bzero()已被弃用。使用memset()。 -
我认为你们提到的内容并不重要。奇怪的是,
fork之后的所有分支都在同一个进程中运行。也许您可以先尝试检查fork,看看它是否正常工作。如果您使用的库与您的机器不兼容,尤其是在嵌入式系统中,我们无法找出问题所在。