如何解决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 举报,一经查实,本站将立刻删除。