2016-11-20 5 views
1

私はそこからFIFOの名前付きパイプから文字列(char *)を取り出しています。スレッドに入れています。文字列(char *)をスレッド関数に渡すと、うまく印刷できます。但し、私がすればfopen()で開くスレッド関数を通して文字列を送信

FILE *fp; 

fp = fopen(string, "wb"); 

if(fp){ 
    //it never reaches here 
} 

の機能は基本的に以下の通りです。

void *threadFunction(void *stringBuf){ 
    char *someString; 
    someString = (char *) stringBuf; 
    printf("%s\n", someString); //prints fine 
    FILE *fp; 
    fp = fopen(someString, "wb"); 
    if (fp) { 
     //do stuff, but it never reaches here 
    } 

私はここで間違っていますか?

+1

'someString'で指定されたパスへの書き込み権限がありますか? – timrau

+1

'fopen'が失敗する可能性があります。' if'の 'else'部分で失敗を報告する必要があります。 'perror'を見てください。 –

+0

なぜあなたはfopenでエラーが発生していないのでしょうか? perror()を使用してください! – Stargateur

答えて

0

特定のコードには、特にスレッドに関連するものは何もありません。これは、一貫性のあるエラーを引き起こします。

stringBufが呼び出しスレッドでどのように割り当てられていますか?スタック上にある場合は、printfとfopenの間の呼び出し側スレッドによって上書きされる可能性がありますが、断続的な失敗と見なすことになります。

これを可能性として排除するために、malloc()でバッファを割り当てます。

+0

私のメインのstringBufはcharのStringBuffer [MAX_BUF]として定義されています。ここで、MAX_BUFは#define MAX_BUF 1024 – John

+0

@Johnなので、スタックに定義されています。 mallocを使用してバッファを割り当て、可能性を排除します。 – antlersoft

+0

私は名前付きパイプを使用しているので、関数read(fd、stringBuffer、Len)があります。私はmallocをどのように使用するのかよく分かりません。本当に新しいCに申し訳ありません。 – John

関連する問題