以下是我从管道函数中读取的代码片段。这可以正确执行并验证数据是否已进入缓冲区。
int readFrom(char *buffer)
{
int nread;
if((nread = read(readfd,buffer,100)) < 0)
{
printf("\nerror in reading data from FIFO\n");
return(-1);
}
buffer[nread]='\0';
return(0);
}
在上面的示例中, nread 小于 100 。我正在使用 GCC-4.7.0。
我们为上述函数提供了一个抽象层,如下所示:
int pipe_input(char *parmPtr, int size)
{
char readMsg[100];
if( readFrom((char *)&readMsg) == -1)
return ERROR;
if (strlen(readMsg) < 1)
{
printf("Incorrect Input\n");
return ERROR;
}
strncpy(parmPtr, readMsg, ((size < 100)?size:100));
return 0;
}
在上述函数中,也验证了读取消息是正确的,并且 parmptr 正确加载了该值。但是在我试图调用 pipe_input 的函数中,我得到了一个 sigsegv。GCC-4.7.0 会发生这种情况,但使用 GCC-4.2.4 编译的相同代码可以正常执行。我验证了警告,但上述没有警告。任何指针都会非常有帮助。
下面是调用 pipe_input 的代码片段:
int Calling_func(void)
{
char alpha[100] ;
pipe_input(alpha,100);
printf("alpha value is %s \r\n",alpha);
}
在 print 语句中获取 sigsegv。