fork()上的C分段错误(核心转储)

时间:2014-11-17 21:15:53

标签: c fork

我有一个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);
}

1 个答案:

答案 0 :(得分:0)

char *value = 'start'中的

writeOut()是错误的。首先,'start'不是字符串。它是一个字符文字。其次,如果它一个字符串,它将是不可变的。