gpt4 book ai didi

使用 pipe() 和 fork() 复制文件内容

转载 作者:IT王子 更新时间:2023-10-29 01:21:06 25 4
gpt4 key购买 nike

已经有人问过类似的问题,但他们的解决方案对我帮助不大

Program that read file and send it to parent process with pipe

Read/writing on a pipe, accomplishing file copying in C


我正在尝试从文件 test.txt 中读取(其中包含一行文本),将其写入管道,子进程将从管道中读取并写入内容到另一个文件。

 /* Read the contents of a file and display it using pipe */

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

void main()
{
char buffer[100];
char childbuff[100];
int fd[2], des, bytes, target;

pipe(fd);

if(fork()) {
/* parent process closes the downstream */
close(fd[0]);

/* reads the file */
des = open("test.txt", O_RDONLY);
bytes = read(des, buffer, sizeof(buffer));

/* puts data in pipe */
write(fd[1], buffer, bytes);
} else {
/* Child process closes the upstream */
close(fd[1]);

/* reads from the pipe */
read(fd[0], childbuff, sizeof(childbuff));
close(fd[0]);

/* output the received string */
printf("\nReceived string is -- %s", childbuff);
target = open("copy.txt", O_CREAT, 00777);
write(target, childbuff, (strlen(childbuff)-1));
}
}

问题是 printf() 在终端上打印字符串,一个名为 copy.txt 的文件也被创建,但没有任何内容被复制到它(似乎有write() 函数有问题)

但是,如果我改变

write(target, childbuff, (strlen(childbuff)-1));

write(1, childbuff, (strlen(childbuff)-1));

字符串只是写在我的终端上。

那么我在写入文件时可能做错了什么?

最佳答案

您还需要O_WRONLY 才能写入文件:

target = open("copy.txt", O_CREAT |O_WRONLY, 00777);

请注意,您不能使用 strlen()%s 将其打印为 C 字符串。 read(2) 不返回以 NUL 结尾的字符串。

取而代之的是获取从 read() 读取的字节数,并在 write() 中使用它:

    ssize_t num_bytes = read(fd[0], childbuff, sizeof(childbuff));

write(target, childbuff, num_bytes);

您应该检查所有 系统调用的返回是否失败。

关于使用 pipe() 和 fork() 复制文件内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34329235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com