当前位置:  技术问答>linux和unix

Linux 中字符数组作为全局变量的纠结问题

    来源: 互联网  发布时间:2017-01-27

    本文导语:  小弟最近在做操作系统课设,需要在linux下编程,是关于信号量的,父进程子进程通信 父进程和子进程通过信号实现异步合作   在Linux环境下用C语言编程实现,使用用户自定义的信号SIGUSR1由父进程发给子进程,SIGUSR...

小弟最近在做操作系统课设,需要在linux下编程,是关于信号量的,父进程子进程通信
父进程和子进程通过信号实现异步合作
  在Linux环境下用C语言编程实现,使用用户自定义的信号SIGUSR1由父进程发给子进程,SIGUSR2由子进程发给父进程;父进程和子进程各自从终端接收一个字符串,完成后用kill调用发送信号,接收方接收到信号后,显示对方的进程号及字符串。利用信号方式(Signal(SIGCHLD,SIG_IDN))使父进程不必等待子进程结束,且不产生"ZOMBIE".
 
然后,我需要两个全局变量的字符数组存放输入的字符串,于是
定义了如下的字符串全局变量
#include 
#include 
#include 
int pid,ppid;
char ps[100]; 
char cs[100];
void p_action(int signo){
    printf("parent process %d recieve SIGUSR2 signal,signo is %dn",getpid(),signo);
     printf("the sender(child) process's pid is %dn",pid);
     printf("the chararray from child process is:%sn",cs);
}

void c_action(int signo){
    printf("child process %d recieve SIGUSR1 signal,signo is %dn",getpid(),signo);
    printf("the sender(parent) process's pid is %dn",ppid);
    printf("the chararray from parent process is:%sn",ps);
}

int main(int argc, char *argv[])
{
   
    signal(SIGCHLD,SIG_IGN);
    switch(pid=fork()){
        case -1:
            printf("create child process error!n");
            break;
        case 0:
            signal(SIGUSR1,c_action);
            ppid=getppid();
           
            sleep(5);
            printf("please input the string from child:n");
            scanf("%s",cs);
            printf("child process %d send signal %d to process %d...n",getpid(),SIGUSR2,ppid);
            kill(ppid,SIGUSR2);
            break;
        default:
            signal(SIGUSR2,p_action);
             
            sleep(2);
            printf("please input the string from parent:n");
             scanf("%s",ps);
            printf("parent process %d send signal %d to process %d...n",getpid(),SIGUSR1,pid);
            kill(pid,SIGUSR1);
            pause();
            break;
    }
    return 0;
}



现在,最主要的问题是,当我运行的时候发现,主函数中的scanf函数并不起作用,输入并没有改变全局变量字符数组ps,cs,所以在相应函数c_action 和p_action响应时,输出的字符数组仍然是空值,并没有实现相应的功能。。。。按道理说,全局变量的作用域是整个文件啊,scanf应该可以对其修改,但是为什么不起作用呢?想了很长时间,看了很多资料未果?而且本来对linux这东西就有一种畏惧感,所以头晕脑胀,呕吐恶心,只能请求大家帮忙了。。。各路江湖志士,走过路过帮小弟看看吧,时间紧迫,望大家帮忙!!!!1

|
#include 
#include 
#include 
#include 
int pid,ppid;
typedef struct{
char ps[100]; 
char cs[100];
}SharedData;
SharedData *share_map;
void p_action(int signo){
  ....
}

void c_action(int signo){
  ....
}

int main(int argc, char *argv[])
{
   
  share_map = (SharedData*)mmap(NULL, sizeof(SharedData),PROT_READ | PROT_WRITE,
MAP_SHARED | MAP_ANONYMOUS, -1, 0);
  signal(SIGCHLD,SIG_IGN);
  switch(pid=fork()){
  case -1:
  printf("create child process error!n");
  break;
  case 0:
  signal(SIGUSR1,c_action);
  ppid=getppid();
   
  sleep(5);
  printf("please input the string from child:n");
  scanf("%s",share_map->cs);
  printf("child process %d send signal %d to process %d...n",getpid(),SIGUSR2,ppid);
  kill(ppid,SIGUSR2);
  break;
  default:
  signal(SIGUSR2,p_action);
   
  //sleep(2);
  printf("please input the string from parent:n");
  scanf("%s",share_map->ps);
  printf("parent process %d send signal %d to process %d...n",getpid(),SIGUSR1,pid);
  kill(pid,SIGUSR1);
  pause();
  break;
  }
  return 0;
}

    
 
 

您可能感兴趣的文章:

  • linux 的shell(bash)中有数组吗?
  • linux c数组问题
  • 请问如何在linux (redhat)下传递一维数组指针?
  • 浙ICP备11055608号-3 iis7站长之家
  • 请教如何在qt-linux环境下两个cpp文件中对同一个数组作读写互斥操作?
  • 在shell中使用数组需要什么特殊的条件马? 怎么在有的linux下能够用,在有的linux下就不能能使用?
  • 请问,LINUX的C++中,如何将string类型与char数组一次性互相转换?
  • linux & unix 如何把 long型转化为 字符串数组(用来拼socket报文)?高手请救!!
  • linux结构体中一个0个元素的数组
  • 奇怪 linux 下 动态创建数组 这样写说结构体的实参类型无效
  • Linux下C语言怎样从键盘读入一个十六进制字符数组
  • 通过实例深入理解linux shell数组
  • linux shell数组深入学习理解
  • linux下怎么样搜索当前目录下的所有MP3文件,并把文件名保存在数组里??????
  • linux内核代码 sem.c 中结将结构体视为数组的问题
  • linux 分区 储存问题,纠结,想不明白了(新手)
  • 纠结啊!嵌入式linux研二,要不要去做防火墙?求指点,在线等
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux中大量的全局变量怎么体现结构化的程序设计?
  • linux动态链接库里全局变量和静态变量会导致动态库不可重入吗?
  • linux内核全局变量定义问题!
  • 建一个linux共享库(.so.x.x文件)里边包含类、全局变量,结构体等
  • 初学linux,请问如何把我的路径加到全局的路径里面去?要改哪个配置文件?
  • linux内核怎么定义汇编全局变量及在c文件中使用这个变量?有关0。11下的字符回显
  • 高手们,请问我在linux中装了jdk,但现在不知道该如何设置全局path啊!!!!!!!!
  • linux下,在调用main()函数之前怎样得到命令行参数argc和argv??『比如在main()前面构造全局对象时』
  • linux 多线程 问题 全局变量 共享问题,恳请赐教,帮助>>
  • linux下如何安全地让三个不同线程处理一个全局的链表
  • 关于Linux下多线程情况下全局变量保护的问题,求个解决方案
  • 内核模块,使用全局变量current, 包含#include <linux/kernel.h>编译出错?
  • 关于在linux下驱动全局变量赋值问题!!!
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • secureCRT下Linux终端汉字乱码解决方法
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • Linux c字符串中不可打印字符转换成16进制
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux
  • linux命令大全详细分类介绍及常用linux命令文档手册下载
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在没有linux的盘,只有DOS启动盘)
  • Linux Kernel 'sctp_v6_xmit()'函数信息泄露漏洞
  • 如何让win2000和linux共存。我装好WIN2000,再装LINUX7.0,但LILO只能找到LINUX,不能引导WIN2000
  • linux c下利用srand和rand函数生成随机字符串
  • 在windows中的VMware装了个linux,主板有两个串口,能做windows和linux的串口通信测试么,怎么测试这两个串口在linux是有效
  • Linux c++虚函数(virtual function)简单用法示例代码
  • 我们网站的服务器从windows2000迁往linux,ASP程序继续使用,可是我连LINUX的皮毛都不了解,大家告诉我LINUX下怎么建网站??


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3