微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C - 将输入从父级发送到子级并将其返回

如何解决C - 将输入从父级发送到子级并将其返回

所以,我对 C 编程语言还很陌生,我在完成这个练习时遇到了一些困难。
基本上,我必须 fork(),然后将输入字符串从 Parent 进程发送到 Child,在 Child 进程中执行一个大写函数并将其返回给 Parent 以便它可以打印。

管道仍然是真正的“胡言乱语”,但不考虑大写函数我有这个:

#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

#define READ_END   0
#define WRITE_END  1
#define BUF_SIZE   256

int main(int argc,char* argv[]) {
  int   fd[2];
  pid_t pid;

  if (pipe(fd) < 0) {
    perror("pipe error");
    exit(EXIT_FAILURE);
  }

  if ((pid = fork()) < 0) {
    perror("fork error");
    exit(EXIT_FAILURE);
  } 
  else
  if (pid > 0) {
    int nbytes;
    char line[BUF_SIZE];    

    /* parent writes to pipe */
    close(fd[READ_END]);
    snprintf(line,BUF_SIZE,"Hello child (%d)!  I'm your parent pid (%d).\n",pid,getpid());
    if ((nbytes = write(fd[WRITE_END],line,strlen(line))) < 0) {
      fprintf(stderr,"Unable to write to pipe: %s\n",strerror(errno));
      exit(EXIT_FAILURE);
    }
    close(fd[WRITE_END]);
    
    /* wait for child and exit */
    if ( waitpid(pid,NULL,0) < 0) {
      fprintf(stderr,"Unable to catch child exiting: %s\n",strerror(errno));       exit(EXIT_FAILURE);     
    }

    /* return gracefully */
    exit(EXIT_SUCCESS);
  } 
  else {
    int  nbytes;
    char line[BUF_SIZE];
    
    /* child reads from pipe */
    close(fd[WRITE_END]);
    if ((nbytes = read(fd[READ_END],BUF_SIZE)) < 0 ) {
      fprintf(stderr,"Unable to read from pipe: %s\n",strerror(errno));
      exit(EXIT_FAILURE);     
    }
    close(fd[READ_END]);

    /* write message from parent */
    write(STDOUT_FILENO,nbytes);

    /* return gracefully */
    exit(EXIT_SUCCESS);
  }
}```

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。