我有一个arduino将电子邮件发送到此服务器脚本。
你会从代码中得到一个jist,但问题是当我第一条消息进入cli输出segmentation error (core dumped)
然后readIn()
& writeOut()
函数正在由同一个流程执行(这两个函数都与sleep(1)
及时运行; $ps aux
下只显示了一个流程。
#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);
}
答案 0 :(得分:0)
char *value = 'start'
中的 writeOut()
是错误的。首先,'start'
不是字符串。它是一个字符文字。其次,如果它是一个字符串,它将是不可变的。