免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3152 | 回复: 12
打印 上一主题 下一主题

[Linux] linux C语言新手求助 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-07-30 17:33 |只看该作者 |倒序浏览
本人linux C语言初学者(纯自学),很多问题不懂,求教各位前辈,为什么我的进程通讯测试程序中write和read函数都返回了-1?程序代码如下:
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main(void)
{
  int pipefd;
  int pipe_fd[2];
  int length;
  pid_t pid;
  //char buf[100];
  char kin[100],kout[100];
  if(pipe(pipe_fd[2])!=0)
  {
    printf("Error in pipe!");
    exit(0);
  }
  if((pid=fork())==-1)
  {
    printf("Error in fork!\n");
    exit(0);
  }
  if(pid>0)
  {
    close(pipe_fd[0]);
    printf("This is the father process,please input characters!\n");
    gets(kin);
    // puts(kin);
    if(write(pipe_fd[1],kin,100)!=-1)
    {
      length=strlen(kin);
      printf("%d characters were write into the subprocess!\n",length);
      printf("%s were written to subprocess!\n",puts(kin));
    }
  }
  if(pid==0)
  {
    close(pipe_fd[1]);
    sleep(15);
    if(read(pipe_fd[0],kout,100)==-1)
    {
      length=strlen(kout);
      printf("%d characters written to subprocess!\n",length);
      printf("%s were written to subprocess!\n",puts(kout));
    }
  }
}

论坛徽章:
0
2 [报告]
发表于 2012-07-30 22:00 |只看该作者
  1. #include<unistd.h>
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. #include<string.h>

  5. int main(void)
  6. {
  7.   int pipefd;
  8.   int pipe_fd[2];
  9.   int length;
  10.   pid_t pid;
  11.   //char buf[100];
  12.   char kin[100],kout[100];
  13.   if(pipe(pipe_fd)!=0)
  14.   {
  15.     printf("Error in pipe!");
  16.     exit(0);
  17.   }
  18.   if((pid=fork())==-1)
  19.   {
  20.     printf("Error in fork!\n");
  21.     exit(0);
  22.   }
  23.   if(pid>0)
  24.   {
  25.     close(pipe_fd[0]);
  26.     printf("This is the father process,please input characters!\n");
  27.     gets(kin);
  28.     // puts(kin);
  29.     if(write(pipe_fd[1],kin,100)!=-1)
  30.     {
  31.       length=strlen(kin);
  32.       printf("%d characters were write into the subprocess!\n",length);
  33.    //   printf("%s were written to subprocess!\n",puts(kin));
  34.     }
  35.   }
  36.   if(pid==0)
  37.   {
  38.     close(pipe_fd[1]);
  39.     sleep(15);
  40.     if(read(pipe_fd[0],kout,100)==-1)
  41.     {
  42.       length=strlen(kout);
  43.       printf("%d characters written to subprocess!\n",length);
  44.     //  printf("%s were written to subprocess!\n",puts(kout));
  45.     }
  46.   }
  47. }
复制代码

论坛徽章:
0
3 [报告]
发表于 2012-07-30 22:02 |只看该作者
从你的用意来看可以把 printf  改成 snprintf 函数

论坛徽章:
0
4 [报告]
发表于 2012-07-31 02:15 |只看该作者
这里的printf用的是不对,但现在最大的问题是write和read函数都返回了-1,写和读操作相当于全部失败了。

论坛徽章:
0
5 [报告]
发表于 2012-07-31 10:12 |只看该作者
字符串数组 没有 初始化     而且 读管道 和写管道  针对的字符串输组不同

          # INCLUDE<STRING.H>
    可以用 MEMSET() 初始化 后       在写

论坛徽章:
0
6 [报告]
发表于 2012-08-01 00:47 |只看该作者
  1. pipe(pipe_fd)
复制代码

论坛徽章:
0
7 [报告]
发表于 2012-08-01 14:25 |只看该作者
回复 6# xiyoulaoyuanjia

实在抱歉,没有仔细看您回复的代码,忽略了这个参数传递的问题。说实话,这真不是个大问题,是我太马虎了。。。。。十分感谢前辈的提醒。


   

论坛徽章:
0
8 [报告]
发表于 2012-08-01 14:48 |只看该作者
没关系!加油~~

论坛徽章:
0
9 [报告]
发表于 2012-08-25 23:12 |只看该作者
if(read(pipe_fd[0],kout,100)==-1) ?
这句应该是 if(read(pipe_fd[0],kout,100)!=-1)才对吧

论坛徽章:
0
10 [报告]
发表于 2012-08-30 17:55 |只看该作者
经典的LINUX库函数手册,先看看这个

linuxC.rar

99.16 KB, 下载次数: 44

LINUX库函数

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

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP