""\n if(pid==0)\n {\n int fd = open ("fifo",O_RDWR);\n char *msg;\n time_t t ;\n struct tm *Time;\n time(&t);\n Time=localtime(&t);\n char *wd[7] ={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};\n snprintf(msg,100,"%d:%d年%d月%d日 %d时%d分%d秒 %s",getpid(),\n 1900+Time->tm_year,\n 1+Time->tm_mon ,\n Time->tm_mday, Time->tm_hour,\n Time->tm_min,\n Time->tm_sec,\n wd[Time->tm_wday]); \n\n write(fd,msg,strlen(msg));\n printf("已发送:%s\n",msg);\n close(fd);\n return 0;\n }\n" 在子线程中,你声明了一个指针变量 char *msg,但是你没有为这个指针分配内存空间。在使用 snprintf 函数将消息写入 msg 之前,你需要为 msg 分配足够的内存空间。可以通过使用 malloc 函数来为 msg 动态分配内存,或者直接声明一个足够大的字符数组来存储消息。以下是修正后的代码示例:

if (pid == 0) {
    int fd = open("fifo", O_RDWR);
    char msg[100]; // 声明足够大的字符数组来存储消息
    time_t t;
    struct tm *Time;
    time(&t);
    Time = localtime(&t);
    char *wd[7] = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
    snprintf(msg, 100, "%d:%d年%d月%d日  %d时%d分%d秒  %s", getpid(),
             1900 + Time->tm_year,
             1 + Time->tm_mon,
             Time->tm_mday, Time->tm_hour,
             Time->tm_min,
             Time->tm_sec,
             wd[Time->tm_wday]);

    write(fd, msg, strlen(msg));
    printf("已发送:%s\n", msg);
    close(fd);
    return 0;
}

请注意,这里将 msg 定义为足够大的字符数组,并且不再需要手动释放内存。

子线程向管道发送信息失败的原因:内存分配错误

原文地址: https://www.cveoy.top/t/topic/quMb 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录