QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1223|回复: 7

求助:向各位大哥请教个进程问题,谢谢!

[复制链接]
发表于 2006-7-3 10:13:34 | 显示全部楼层 |阅读模式
#include <stdio.h>
#include <signal.h>
#include <stdarg.h>

void terminatehandler(int signumber)


int main(void)
{
        char buffer1[100],buffer2[100];
        int i;
       
        if((signal(SIGTERM,&terminatehandler))==SIG_ER)
                {
                        printf("couldn't register signal handler \n");
                }
               
        printf("pid of this process:%6d",getpid());
       
        for( ; ; )
            {
                fgets(buffer1, sizeof(buffer1), stdin);
                for(i=0; i<100; i++)
                {
                             if(buffer1[ i ]>=97&&buffer1[ i ]<=122)
                                 buffer2[ i ]=buffer1[ i ]-32;
                             else
                                 buffer2[ i ]=buffer1[ i ];
                        printf("Your input is: %s\n\n", buffer2);
                     }
        }
             return 0;
}


void terminatehandler(int signumber)
{
        printf("catch signal SUGTERM .\n");
        exit(0);
}       

这是书上的一段程序,有好几处看不懂,请各位大哥帮帮我

问题1:
signal(SIGTERM,&terminatehandler)
这句话是什么意思?
有什么作用?


问题2:
void terminatehandler(int signumber)
{
        printf("catch signal SUGTERM .\n");
        exit(0);
}       

是说明 terminatehandler 带了个 int 类型参数的

可是
signal(SIGTERM,&terminatehandler)

没有参数啊

这是为什么呢?

问题3:
signal(SIGTERM,&terminatehandler)
中的 &terminatehandler 是什么意思?
有什么作用?

问题4:

void terminatehandler(int signumber)
{
        printf("catch signal SUGTERM .\n");
        exit(0);
}       

来看 这个函数根本没有起什么作用,
只是输出 catch signal SUGTERM

那个 exit(0) 对在整个程序有影响吗?


谢谢各位大哥!
发表于 2006-7-3 12:50:02 | 显示全部楼层
设置信号处理函数, &terminatehandler是函数指针,不用&也行。
我这exit(0)是会导致程序退出的。
回复

使用道具 举报

 楼主| 发表于 2006-7-3 14:51:09 | 显示全部楼层
谢谢 大哥
当程序从 int main(void) 往下执行
当执行到 signal(SIGTERM,&terminatehandler)

就会调用

void terminatehandler(int signumber)
{
printf("catch signal SUGTERM .\n");
exit(0);
}


这时,会发生什么情况呢?

还有 signal(SIGTERM,&terminatehandler) 中的 terminatehandler
没有参数,可是
void terminatehandler(int signumber)
{
printf("catch signal SUGTERM .\n");
exit(0);
}

是带有参数的。

大大,这是什么原因的?

谢谢!
回复

使用道具 举报

发表于 2006-7-3 18:29:07 | 显示全部楼层
用到的知识: 指向函数的指针变量.
signal(SIGTERM,&terminatehandler) 中,用terminatehandler函数作为其参数.这里将terminatehandler的入口地址传送给signal函数.将函数作为参数的时候是不用带着参数的.
具体的任何一本讲C的书上都有讲的,一般都在讲解指针的那一章.
如:K&R,P118,谭浩强的书中也有.
回复

使用道具 举报

发表于 2006-7-3 22:49:07 | 显示全部楼层
不是不用传,而是不是在这里传。
回复

使用道具 举报

发表于 2006-7-3 23:27:11 | 显示全部楼层
谢谢
哪在哪里传啊?
回复

使用道具 举报

发表于 2006-7-4 08:52:42 | 显示全部楼层
系统负责
回复

使用道具 举报

 楼主| 发表于 2006-7-4 09:46:10 | 显示全部楼层
谢谢大大!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-2 12:26 , Processed in 0.090239 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表