⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kill.c

📁 在linux9中实现回显
💻 C
字号:
#include <stdio.h>
#include <string.h>
#include <signal.h>
#include <sys/types.h>
#include <ctype.h>

int main(int argc,char *argv[])
{
    int   i,j = 0,k = 1,m = 14;
    char  sig[34][10] = {"SIGHUP","SIGINT","SIGQUIT","SIGILL","SIGTRAP","SIGABRT","SIGBUS","SIGFPE","SIGKILL","SIGUSR1","SIGSEGV","SIGUSR2","SIGPIPE","SIGALRM","SIGTERM"," ","SIGCHLD","SIGCONT","SIGSTOP","SIGTSTP","SIGTTIN","SIGTTOU","SIGURG","SIGXCPU","SIGXFSZ","SIGVTALRM","SIGPROF","SIGWINCH","SIGIO","SIGPWR","SIGSYS"," ","SIGRTMIN","SIGRTMAX"};
    char  str_signo[5],str_ad_signo[5];
    int   signo,ad_signo;
    char  str_pid[10];
    char  str_signal[10];
    pid_t pid;
    if(argc < 2)
    {
        printf("kill:usage:kill -signo pid or kill -l [signo|sigspec]\n");
        exit(0);
    }
    else if(argc == 2)
    {
        if(strcmp(argv[1],"-l") == 0)
        {
            loop:for(i = 0;i < 33;i++)    
            {
                 if(strcmp(sig[i]," ") == 0)
                     continue;
                 if(j !=0&&j%4 == 0)
                 printf("\n");
                 j++;
                 printf("%2d) %-12s",i+1,sig[i]);
            }
            for(i=33;i < 62;i++)
            {
                 if(j%4 == 0)
                 printf("\n");
                 j++;
                 if(k <=15)
                 {
                      printf("%2d) %s+%-3d",i+1,sig[32],k);
                      k++;
                 }
                 else 
                 {
                      printf("%2d) %s-%-3d",i+1,sig[33],m);
                      m--;
                 }   
            }
            printf("\n");
            printf("63) %-12s",sig[33]);
            printf("\n");
        }
        else 
        {
            printf("kill:usage:kill -signo pid or kill -l [signo|sigspec]\n");
            exit(0);
        }
    }
    else if(strcmp(argv[1],"-l") == 0)
    {
        for(i = 0;i< 33;i++)
        {
            if(strcmp(argv[2],sig[i]) == 0)
            {
                printf("%d\n",i + 1);
                exit(0);
            }
        }  
        if(strstr(argv[2],"SIGRTMIN+") != 0)
        {
            strcpy(str_ad_signo,&argv[2][9]);
            ad_signo = atoi(str_ad_signo);
            printf("%d\n",ad_signo + 33);
            exit(0);
        }
        if(strstr(argv[2],"SIGRTMAX-") != 0)
        {
            strcpy(str_ad_signo,&argv[2][9]);
            ad_signo = atoi(str_ad_signo);
            printf("%d\n",63 - ad_signo);
            exit(0);
        }
        for(i = 0;argv[2][i] != '\0';i++)
           if(!isdigit(argv[2][i]))
              goto err;
        strcpy(str_signo,argv[2]);
        signo = atoi(str_signo);
        if(signo < 34)
           printf("%s\n",&sig[signo - 1][3]);
        else if(signo < 49)
           printf("%s+%d\n",&sig[32][3],signo - 33);
        else if(signo < 63)
           printf("%s-%d\n",&sig[33][3],63 - signo);
        else if(signo == 63) 
           printf("%s\n",&sig[33][3]);
        else 
           err:printf("-wsh: kill: %s: invalid signal specfication!\n",argv[2]); 
    } 
    else 
    {
        for(i = 0;i< 33;i++)
        {
            if(strcmp(&argv[1][1],sig[i]) == 0)
            {
                signo = i + 1;
                goto kl;
            }
        }  
        if(strstr(&argv[1][1],"SIGRTMIN+") != 0)
        {
            strcpy(str_ad_signo,&argv[2][9]);
            ad_signo = atoi(str_ad_signo);
            signo = 33 + ad_signo;
            goto kl;
        }
        if(strstr(&argv[1][1],"SIGRTMAX-") != 0)
        {
            strcpy(str_ad_signo,&argv[2][9]);
            ad_signo = atoi(str_ad_signo);
            signo = 63 - ad_signo;
            goto kl;
        }
        for(i = 1;argv[1][i] != 0;i++)
          if(!isdigit(argv[1][i]))
          {
           printf("-wsh: kill: %s: invalid signal specfication!\n",&argv[1][1]);
           exit(0);
          }
        strcpy(str_signo,&argv[1][1]);
        signo = atoi(str_signo);
        kl:for(i = 0;argv[2][i] != 0;i++)
          if(!isdigit(argv[2][i]))
          {
            printf("-wsh: kill: %s: No such pid!\n",argv[2]);
            exit(0);
          }
        strcpy(str_pid,argv[2]);
        pid = atoi(str_pid);
        if(kill(pid,signo) < 0)
        {
           perror("");
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -