首页 > 系统相关 >C语言 父子进程不能共享全局变量

C语言 父子进程不能共享全局变量

时间:2024-05-05 10:11:06浏览次数:28  
标签:process pid C语言 flag printf 进程 共享 全局变量

父子进程不能共享全局变量。
父子进程中的任何一方修改了全局变量,只是修改了副本,只对自己可见,对另一方不可见。
C语言中即使加了static也不行。

#include <stdio.h>
#include <unistd.h>

// 初始值是0
int flag;

int main()
{
    pid_t pid;
    // 父进程和子进程执行相同代码即main函数
    // 父进程创建子进程并返回子进程的PID,PID>0
    // 子进程调用fork函数返回0,不继续创建子进程
    pid = fork();
    if (pid > 0) // 父进程逻辑
    {
        printf("father process is PID: %d\n", getpid());
        while (1) {
            if (flag == 0) {
                flag = 1;
                printf("father process set flag = 1\n");
            }

            sleep(1);

            printf("father process get flag is %d\n", flag);
        }
    }
    else if (pid == 0) // 子进程逻辑
    {
        printf("son process pid is %d\n", getpid());
        while (1) {
            if (flag == 0) {
                flag = 2;
                printf("son process set flag = 2\n");
            }

            sleep(1);

            printf("son process get flag is %d\n", flag);
        }
    }
    else
    {
        printf("fork failed\n");
        return 1;
    }

    return 0;
}

标签:process,pid,C语言,flag,printf,进程,共享,全局变量
From: https://www.cnblogs.com/WJQ2017/p/18173252

相关文章

  • C语言转写成MIPS指令集汇编以及MIPS指令集汇编中函数调用时栈的变化
    一、问候语欢迎你来到我的博客!二、C语言代码分析  这段C语言代码共有3个函数组成。set_array函数传入1个int类型的变量num,并创建了1个int类型临时变量i和1个临时int类型数组array,里面含有10个单位,此函数主要目的是调用compare函数,并将num和i传入该函数中,得到其函数返回值......
  • 05. C语言数组
    数组用于将多个数据集中存储,方便管理,此文将集中存储任何类型数据的语句都称为数组,数组根据存储数据的类型和方式分为同型数组、结构体、共用体、枚举。 【同型数组】同型数组也直接称为数组,用于存储多个类型相同的数据,数组内的数据称为数组元素,数组元素占用连续的虚拟地址,每个......
  • 浙大版C语言程序设计习题11-17
    点击查看代码typedefstructNODE{intdata;structNODE*next;}NODE,*Linkedlist;//初始化头节点voidInit(Linkedlist&L){L=(NODE*)malloc(sizeof(NODE));L->next=NULL;}//尾插法创建链表LinkedlistCreateFromRear(LinkedlistL){NODE*rear=L;for......
  • C语言代码题
    C语言代码--练习题试写一个函数,计算字符串s中最大连续相同的字符个数。例如,若s为"aaabbbb",则返回值为4;若s为"abcde",则返回值为1。#include<stdio.h>/******************************************************************************functionname:max_sam......
  • 【C语言】---- 文件输入输出与文件管理函数
    1文件输入输出函数1.1打开和关闭文件fopen函数fopen是C标准库中用于打开文件的函数之一。它的原型定义在<stdio.h>头文件中,具体格式如下:FILE*fopen(constchar*filename,constchar*mode);这个函数接受两个参数:filename:一个以字符串形式表示的文件名,用于指定要......
  • C语言 Stack功能实现(自存)
    #include<stdio.h>#include<stdlib.h>#include<stdbool.h>typedefintE;typedefstructnode{Edata;structnode*next;}Node;typedefstruct{Node*top;intsize;}Stack;//APIStack*stack_create(void);void......
  • C语言编程规范——名称缩写
    C语言中常见名称缩写全称缩写翻译calculatecalc计算additionadd加subtractionsub减multiplicationmul乘法divisiondiv除法hexadecimalhex十六进制arrayarr数组、集合listlst列表Sequenceseq序列Segment(s)seg段......
  • C语言编程规范——命名规则
    一、C语言变量名的命名规则1.只能以字母下划线开始2.不能以数字开始3.不能使用默认关键字4.一般使用小写在程序设计中,变量名、函数名、数组名等统称为标识符。简单地说,标识符就是一个名字。除库函数的函数名由系统定义外,其余都由用户自定义。C语言规定,标识符只能由字母(a~z,A~Z)......
  • 【c语言】编译过程详解
    为什么我们编写的C语言要进行编译❓什么是编译❓编译时发生了什么❓机器无法理解我们编写的C语言,而编译就是将面向人类的高级语言转换成为面向机器的机器语言的过程,图1是GCC编译器进行编译的过程,编译时主要分为了4个阶段,每个阶段的具体作用将在接下来进行介绍。图1......
  • C语言解析FLM(ELF)格式文件
    代码下载:https://gitee.com/jhembedded/flmparse 写这篇博客的目的是因为最近在做一个STM32的离线编程器,离线下载需要用到FLM文件的下载算法,所以实现了一下提取FLM文件中下载算法的C程序。有关ELF格式的详细说明可查看这个文件:http://flint.cs.yale.edu/cs422/doc/ELF_Format.......