2016-11-20 55 views
1

我从一个字符串(char *)从一个FIFO命名管道,从那里我把它放在一个线程。一旦我将字符串(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

我正在使用命名管道,所以我有一个函数读(fd,stringBuffer,Len);我不确定如何在此上使用malloc。对C真的很抱歉。 – John