鱼C论坛

 找回密码
 立即注册
查看: 2840|回复: 6

read函数返回值问题,在线求指导

[复制链接]
发表于 2012-6-25 12:19:57 | 显示全部楼层 |阅读模式
5鱼币
  1. /************************************************************************ *
  2. 为什么read返回值为1 啊。
  3. ************************************************************************ */

  4. #include <stdio.h>
  5. #include <unistd.h>
  6. #include <stdlib.h>

  7. int main(int argc, const char *argv[])
  8. {
  9.         int pipe_fd[2];
  10.         pid_t pid;
  11.         char buf[128];
  12.         int r_num;

  13.         /*创建管道*/
  14.         if (pipe(pipe_fd) < 0) {
  15.                 perror("piep");
  16.                 exit(1);
  17.         }

  18.         if ((pid = fork()) == 0) {/*返回 0 子进程*/
  19.                 close(pipe_fd[1]);/*关闭写端*/
  20.                 sleep(2);/*如果现执行零子进程,则需要等待父进程写数据,才能有数据读取*/
  21.                 if (r_num = read(pipe_fd[0], buf, 128) > 0) {
  22.                         printf("%d numbers read from pipe is %s\n", r_num, buf);
  23.                 }
  24.                 close(pipe_fd[0]);
  25.                 exit(0);
  26.         } else {
  27.                 close(pipe_fd[0]);
  28.                 if (write(pipe_fd[1], "hello\n", 6) != -1)
  29.                         printf("parent write1 hello!\n");
  30.                 if (write(pipe_fd[1], "pipe", 5) != -1)
  31.                         printf("parent write2 pipe!\n");
  32.                 close(pipe_fd[1]);
  33.                 sleep(3);/*写如数据等待子进程读取*/
  34.                 waitpid(pid, NULL, 0);/*等待子进程结束*/
  35.                 exit(0);
  36.                        
  37.         }
  38.         return 0;
  39. }
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-6-25 12:19:58 | 显示全部楼层
  1. if (r_num = read(pipe_fd[0], buf, 128) > 0)
  2. 改为
  3. if ((r_num = read(pipe_fd[0], buf, 128)) > 0)



复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-25 21:17:43 | 显示全部楼层
LZ这个read函数式自己定义的吧,还有你有一个文件也没发出来,我想给你调试,也没法调试,逻辑错误时调试出来的,不是用眼睛看出来的啊。。。所以希望LZ将代码发全,我再帮你调试。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-6-25 22:10:26 | 显示全部楼层

只有你一个人回复了。
我代码是全的。
read是Linux系统函数调用。
首先创建管道,
然后创建子进程,
父进程写入数据,
子进程读取数据并打印。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-26 13:32:52 | 显示全部楼层
下y1页的对白 发表于 2012-6-25 22:10
只有你一个人回复了。
我代码是全的。
read是Linux系统函数调用。

:L 你用的Linux系统吗?   若是这样真超出了我的能力波及范围。。。另等高人了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-6-27 09:18:41 | 显示全部楼层
Tzdner_C 发表于 2012-6-26 13:32
你用的Linux系统吗?   若是这样真超出了我的能力波及范围。。。另等高人了

呵呵  看来是沉了。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-6-27 11:50:43 | 显示全部楼层

十分感谢  看到你的这段代码 我顿时想哭
每次都这样  老是差一点点  太不细心 了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 22:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表