c - 为什么父进程根本不执行?

标签 c linux operating-system

<分区>

以下是共享内存实现的程序,其中父进程和子进程将使用共享内存来打印父进程给定的下一个字母表。

有一个共享内存,两个进程都附加到它以获得所需的结果。在我的代码中,父进程根本不执行。

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<sys/ipc.h>
#include<sys/shm.h>
#include<sys/types.h>
int main(int argc,char *argv[])
 {
   int smid;
   pid_t x;
   char *sm;
   smid=shmget(IPC_PRIVATE,(size_t)sizeof(char),IPC_CREAT);
   x=fork();
   if(x>0)
    {

     sm=(char *)shmat(smid,NULL,0);
     sprintf(sm,"%s",argv[1]);
     printf("Parent wrote:\n");
     puts(sm);
     sleep(4);
     printf("Parent got:\n");
     puts(sm);
     shmdt(sm);
     shmctl(smid,IPC_RMID,NULL);
      }
     else if(x==0)
     {
      sleep(2);
 sm=(char *)shmat(smid,NULL,0);
 printf("Child read:\n");
 puts(sm);
 sm[0]++;
    }
  return 0;
 }

最佳答案

程序中有未定义的行为。您为单个字符分配内存,然后使用 strcpy,它很可能会复制多个 个字符(即使它复制了一个字符,您也必须记住它复制字符串终止符,因此实际上复制了两个字符)。

未定义的行为通常是导致崩溃的主要原因,这可能就是您的代码中发生的情况。

关于c - 为什么父进程根本不执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32687728/

相关文章:

php - 为 PHP 构建 Saxon/C 时出错

linux - OMAP 4430 Linux 与 DSP 的结合使用

javascript - Node.js 在使用 node 命令运行时可以工作,但不能永远运行

java - 如何打印 "Hello World"? - 完整的生命周期

c++ - 我可以使用扇区级数据确定硬盘中安装的操作系统吗?

c - 为什么要使用垃圾收集器?

java - UTF8 字包含日英混合字符。如何识别哪个字符是日文哪个是英文?

linux - bash 的目录书签

C - 两个进程读取同一个文件

c - 在 C 中仅使用 While 和 do while 循环求 5 个数字和 N 个数字的平均值