以下は、パイプからの読み取り関数からのコードスニペットです。これは正しく実行され、データがバッファに取り込まれることを確認します。
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を取得します。