2011-06-27 32 views
10

<signal.h> dahil olmak üzere, struct sigaction eksik bir tür olduğunu belirten bir hata alıyorum.struct sigaction eksik hata

Onunla ne yapacağım konusunda hiçbir fikrim yok.

#include <signal.h> 
struct sigaction act; 

int main(int argc, char** argv) 
{ 
    int depth; 

    /* validate arguments number*/ 
    if(argc < 2) 
    { 
     printf("fatal error: please use arguments <MaxChild> <MaxDepth>\n"); 
     exit(1); 
    } 

    /* register the realtime signal handler for sigchld*/ 

/*173*/ 
    memset(&act,0,sizeof(act)); 
    act.sa_handler = sigproc; 
    sigaction(SIGCHLD, /* signal number whose action will be changed */ 
      &act,  /* new action to do when SIGCHLD arrives*/ 
      NULL);  /* old action - not stored */ 


    srand(time(NULL)); 
    depth = rand() % atoi(argv[2]); /* [0 maxDepth]*/ 

    RecursiveFunc(atoi(argv[1]), depth); 

    return 0; 
} 

hata iletileri yardım edin:

proc.c: In function ‘main’: 
proc.c:173:22: error: invalid application of ‘sizeof’ to incomplete type ‘struct sigaction’ 
proc.c:174:2: error: invalid use of undefined type ‘struct sigaction’ 
cc1: warnings being treated as errors 
proc.c:175:2: error: implicit declaration of function ‘sigaction’ 
+0

Bu kod benim makinede derler. Derleyiciniz nedir? libc? derleme seçenekleri? – mripard

cevap

12

kodunuzda başka satırdan önce sadece

#define _XOPEN_SOURCE 

veya önişlemci tanımlamak için -D seçeneğiyle derlemek sembol

gcc ... -D_XOPEN_SOURCE ... 
+0

bu işe yarıyor, ancak bunun neden gerekli olduğunu açıklayabilir misiniz? – lkanab

+1

@lkanab: 'man 7 feature_test_macros'na göre bu makro (veya standart dışı tanımların ortaya çıkmasını engellemek için "veya" varsayılan olarak gösterilmeyen standart olmayan tanımları göster "için kullanılabilir. [POSIX belgelerinin Ek B] (http://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xsh_chap02.html#tag_22_02_02) bu konuda biraz konuşuyor – pmg

+0

Bu işe yaramadı! Deneysel platform eklentisi 0.7.2 ile Android Studio 2.1 kullanıyorum. Bir fikrin neden? – kristoffz

1

Bunu gcc ile kullandığım C standardını değiştirerek çözdüm.

Ben değiştirildi: Buna gcc -std=c99 ...

: gcc -std=gnu99 ...