没有加入信号处理机制,只是用c实现了一下
首先, kill -l > sig.txt, 把信号重定向到文件
然后, 从文件中提取,根据信号名的前面是一个空格, 后面要么是空格,要么是换行符,要么是制表符号, 或者是 EOF, 放入一个二维数组,然后从二维数组提取即可
发现: 发现sig..txt中居然有\t而实际看起来一点也不像啊。
sig2str.h
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- int get_sig_str(char str[][20]);
- int sig2str(int signo, char *str);
sig2str.c
- #include "sig2str.h"
- int sig2str(int signo, char *str){
- char sig_str[65][20] = {0};
- if(get_sig_str(sig_str) != 0){
- fprintf(stderr, "cannot get the str\n");
- exit(-1);
- }
-
- if(strncpy(str, sig_str[signo], 20) == NULL){
- fprintf(stderr, "strcmp");
- exit(-1);
- }
-
- return 0;
- }
- int get_sig_str(char sig_str[][20]){
- FILE *fp;
-
-
- if((fp = fopen("sig.txt", "r")) == NULL){
- fprintf(stderr,"fopen\n");
- exit(-1);
- }
- int i , j, signum_start[2]= {1, 34}, signum_end[2] = {32, 65};
- char test;
- for(j = 0; j < 2; j++){
- for(i = signum_start[j]; i < signum_end[j]; i++){
- char test;
- while(fgetc(fp) != 'S');
- int j = 1;
- sig_str[i][0] = 'S';
- while((test = fgetc(fp)) != ' '&& test != '\n' && test !='\t'&&test != EOF){
- sig_str[i][j++] = test;
- printf("%d\n", test);
- }
- sig_str[i][j] = '\0';
- }
- }
- return 0;
- }
test.c
- #include <stdio.h>
- #include "sig2str.h"
- int main(){
- char str[20];
- sig2str(20, str);
- puts(str);
- return 0;
- }
阅读(1131) | 评论(0) | 转发(0) |