C语言中的变量作用域

C语言中的变量作用域,c,variables,C,Variables,我有一个main()函数,在声明main()之前,我声明了全局变量 然后在main()内部启动2个进程:通过fork()启动1个子进程和1父进程。为什么父进程和子进程不能共享我声明的全局变量?处理这个问题的好方法是什么?谢谢。当您使用fork()时,您正在生成一个新进程。fork时的所有内容都被复制,但之后。。。没有什么是共享的 此时您有两个选择: 在两个进程之间保持管道畅通,并传达更改 将代码重新编写为多线程,这样可以访问相同的数据(使用锁) 当您使用fork()时,您正在生成一个新进程。f

我有一个main()函数,在声明main()之前,我声明了全局变量

然后在main()内部启动2个进程:通过fork()启动1个子进程和1父进程。为什么父进程和子进程不能共享我声明的全局变量?处理这个问题的好方法是什么?谢谢。

当您使用
fork()
时,您正在生成一个新进程。fork时的所有内容都被复制,但之后。。。没有什么是共享的

此时您有两个选择:

  • 在两个进程之间保持管道畅通,并传达更改
  • 将代码重新编写为多线程,这样可以访问相同的数据(使用锁)
当您使用
fork()
时,您正在生成一个新进程。fork时的所有内容都被复制,但之后。。。没有什么是共享的

此时您有两个选择:

  • 在两个进程之间保持管道畅通,并传达更改
  • 将代码重新编写为多线程,这样可以访问相同的数据(使用锁)
    • 使用fork()可以创建一个具有单独内存空间的新进程。要在进程之间通信,可以使用信号(使用kill())

      如果要共享变量,请考虑使用线程(例如pthy.h)。然后,您可以使用事件或互斥体进行线程同步。

      使用fork()创建一个具有单独内存空间的新进程。要在进程之间通信,可以使用信号(使用kill())


      如果要共享变量,请考虑使用线程(例如pthy.h)。然后您可以使用事件或互斥体进行线程同步。

      谢谢。因此,在它们之间共享数据的唯一好方法是通过一个公共文件?不,还有很多其他选项,共享内存、管道等。实际上还有另一种方法涉及共享内存,但在大多数情况下,这真的是太过分了(而且很复杂)。根据您要执行的操作,文件可能足够了,但您需要查看
      flock()
      ,以确保您没有同时写入文件。@user629034-管道就像一个没有写入磁盘的文件。一个进程保留管道的读取端并从中读取,另一个进程保留写入端并向其写入,允许它们通过“文件”进行通信,而无需磁盘IO的speedbump。@paxdiablo-我说管道:)您也可以使用中间件,但这可能超出了本文的范围。谢谢。因此,在它们之间共享数据的唯一好方法是通过一个公共文件?不,还有很多其他选项,共享内存、管道等。实际上还有另一种方法涉及共享内存,但在大多数情况下,这真的是太过分了(而且很复杂)。根据您要执行的操作,文件可能足够了,但您需要查看
      flock()
      ,以确保您没有同时写入文件。@user629034-管道就像一个没有写入磁盘的文件。一个进程保留管道的读取端并从中读取,另一个进程保留写入端并向其写入,允许它们通过“文件”进行通信,而无需磁盘IO的speedbump。@paxdiablo-我说管道:)您也可以使用中间件,但这可能超出了本文的范围。