当前位置: 技术问答>linux和unix
linux 下mkfifo ,读管道,所得字符串总是乱码
来源: 互联网 发布时间:2016-07-28
本文导语: #include #include #include #include #include #define FIFO "/mnt/hgfs/ShareFiles/lab3/fifo" int main() { char *buf; int fd; unlink( FIFO ); mkfifo( FIFO, 0777 ); if ( fork() > 0 ) { char *s = "HelloWorld...
#include
#include
#include
#include
#include
#define FIFO "/mnt/hgfs/ShareFiles/lab3/fifo"
int main()
{
char *buf;
int fd;
unlink( FIFO );
mkfifo( FIFO, 0777 );
if ( fork() > 0 )
{
char *s = "HelloWorld";
fd = open( FIFO, O_WRONLY );
write( fd, s, strlen(s)+1 );
close( fd );
}
else
{
fd = open( FIFO, O_RDONLY );
read( fd, buf, sizeof(buf) );
printf(" %sn", buf );
close( fd );
}
return 0;
}
这是个在简单不过的代码 ,可是编译过后,运行就是乱码,这个怎么解决呢,望DX指教
#include
#include
#include
#include
#define FIFO "/mnt/hgfs/ShareFiles/lab3/fifo"
int main()
{
char *buf;
int fd;
unlink( FIFO );
mkfifo( FIFO, 0777 );
if ( fork() > 0 )
{
char *s = "HelloWorld";
fd = open( FIFO, O_WRONLY );
write( fd, s, strlen(s)+1 );
close( fd );
}
else
{
fd = open( FIFO, O_RDONLY );
read( fd, buf, sizeof(buf) );
printf(" %sn", buf );
close( fd );
}
return 0;
}
这是个在简单不过的代码 ,可是编译过后,运行就是乱码,这个怎么解决呢,望DX指教
|
问题出在下面的这段代码
“
else
{
fd = open( FIFO, O_RDONLY );
read( fd, buf, sizeof(buf) );
printf(" %sn", buf );
close( fd );
}
”
需要给buf分配内存,才能赋值
“
else
{
fd = open( FIFO, O_RDONLY );
read( fd, buf, sizeof(buf) );
printf(" %sn", buf );
close( fd );
}
”
需要给buf分配内存,才能赋值
|
read( fd, buf, sizeof(buf) );
----------------
buf是个野指针,你只读了4字节,填充到野指针指向的空间,是非常严重的错误
----------------
buf是个野指针,你只读了4字节,填充到野指针指向的空间,是非常严重的错误