linux 下mkfifo ,读管道,所得字符串总是乱码

codingwangfeng 2010-01-01 07:27:39
#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<string.h>
#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(" %s\n", buf );
close( fd );
}

return 0;
}
这是个在简单不过的代码 ,可是编译过后,运行就是乱码,这个怎么解决呢,望DX指教
...全文
377 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
CCM163 2010-01-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 ywp35361 的回复:]
管道读写是一端读一端写,所以你首先得关了父进程的读、子进程的写,其次,ssize_t read(int fd, void *buf,size_t count), fd 为文件描述符,buf为数据存储缓冲区,count为你想读出的字节数,在read时你首先得给buf分配存储空间!
[/Quote]
强烈同意,要首先分配内存空间
grpubr 2010-01-10
  • 打赏
  • 举报
回复
char *buf;
这个改成
char buf[128];
ywp35361 2010-01-07
  • 打赏
  • 举报
回复
管道读写是一端读一端写,所以你首先得关了父进程的读、子进程的写,其次,ssize_t read(int fd, void *buf,size_t count), fd 为文件描述符,buf为数据存储缓冲区,count为你想读出的字节数,在read时你首先得给buf分配存储空间!
jiangfeng999 2010-01-07
  • 打赏
  • 举报
回复
楼主是不是忘了开辟buf的空间,
加一句buf=new char[128];
jiangfeng999 2010-01-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 deep_pro 的回复:]
read( fd, buf, sizeof(buf) );
----------------
buf是个野指针,你只读了4字节,填充到野指针指向的空间,是非常严重的错误
[/Quote]
强烈同意
醉心编码 2010-01-04
  • 打赏
  • 举报
回复
问题出在下面的这段代码

else
{
fd = open( FIFO, O_RDONLY );
read( fd, buf, sizeof(buf) );
printf(" %s\n", buf );
close( fd );
}


需要给buf分配内存,才能赋值
cceczjxy 2010-01-03
  • 打赏
  • 举报
回复
char *buf;-----》char buf[128];
deep_pro 2010-01-02
  • 打赏
  • 举报
回复
如果返回-1
你就perror("read error");

我觉得传入的指针类型倒是无所谓
还是你传给他的代码本身有问题
codingwangfeng 2010-01-02
  • 打赏
  • 举报
回复
呵呵,再请教一下:
这个read函数的第二个参数只可以是char*吗?貌似换成其他的指针总是返回-1哦
deep_pro 2010-01-01
  • 打赏
  • 举报
回复
建议lz先把c内存模型搞懂,看完c专家编程之后再继续APUE
deep_pro 2010-01-01
  • 打赏
  • 举报
回复
read( fd, buf, sizeof(buf) );
----------------
buf是个野指针,你只读了4字节,填充到野指针指向的空间,是非常严重的错误

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧