用户定义的信号消息

时间:2014-12-05 22:23:35

标签: c signals defined

所以,我正在为一个项目使用信号,而且我得到的东西并不是我认为的错误。

我将解释,我得到了这段代码,其中sr2是一个由信号SIGUSR2触发的全局变量,信号处理工作正常。但是我编译并运行,当我触发SIGUSR2时,它会打印"用户定义的信号2"并停止。

我在while(1)循环中有这段代码,它不应该停止。 我可以通过打印某些东西来解决问题,比如被评论的printf,但它会一直打印它,我无法创建新的输入,以触发其他信号。

int teste( const char* path , const char* cadeia, const char* erro )
{
int i, x, stat;
int fd = open( path, O_WRONLY | O_CREAT , S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IWGRP | S_IXGRP | S_IROTH | S_IWOTH | S_IXOTH );

x = flock(fd, LOCK_EX);

if ( sr1 )
{
    printf("sr1\n");
    //sr1 = !sr1 ;
}
if ( !sr2 )
{
    for ( i=0 ; i<CADEIAS ; i++ )
    {
        stat = write( fd, cadeia, strlen(cadeia));
    }
}
else
{
    printf("\n");
    for ( i=0 ; i<CADEIAS/2 ; i++ )
    {
        stat = write( fd, cadeia, strlen(cadeia));
        stat = write( fd, erro, strlen(erro));
    }
}
if ( stp )
{
    printf("gtfo\n");
}

x = flock(fd, LOCK_UN);
close(fd);
return 0 ;
}

这是在&#34;线程制作者&#34;:

中调用的
void * threadEscritor()
{
int a ;
char *f, *c, *e ;

f = (char *)malloc(sizeof(SIZEFICHEIRO));
c = (char *)malloc(sizeof(SIZECADEIA));
e = (char *)malloc(sizeof(SIZECADEIA));

while(1)
{
    a = randomnum(4);
    f = pickfile(a, f);
    a = randomnum(9);
    c = pickchar(a, c);
    e = pickerror(a, e);

    //escreve1x(f, c, e);
    teste(f, c, e);

    if(stp)
    {
        break;
    }
}
pthread_exit(0);
}

在main中调用:

int main ()
{   
pthread_t tids[NUM_THREADS];

int i, safe ;
void* resultado;

sr1 = false ;
sr2 = false ;
stp = false ;

signal( SIGUSR1, sigHandler );
signal( SIGUSR2, sigHandler );
signal( SIGTSTP, sigHandler );

for ( i=0; i<NUM_THREADS ; i++ )
{
    safe = pthread_create( &(tids[i]) , NULL , threadEscritor ) ;
    if ( safe != 0 )
        perror ("Error creating threads");
}

for ( i=0; i<NUM_THREADS ; i++ )
{
    safe = pthread_join( tids[i],  &resultado ) ;
    if ( safe != 0 ) 
    {
        perror ("Errors waiting");
    }
}
}

所以我想知道为什么这条消息出现了(因为我没有在任何地方打印)以及为什么它会停止我的while(1)循环,以及为什么如果我创建一个printf()它&#34;解决&#34;问题。

0 个答案:

没有答案