gpt4 book ai didi

使用标准 I/O 和系统调用制作文件副本的 C 程序

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:55:36 24 4
gpt4 key购买 nike

我正在尝试编写一个 C 程序,它使用标准 I/O 和系统调用来将一个文件的内容复制到另一个文件。

到目前为止,我已经这样做了:

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

int main(int argc, char *argv[])
{
int fd1, fd2;
char buffer[1024];
long int n1;

if(((fd1 = open(argv[1], O_RDONLY)) == -1) || ((fd2=open(argv[2],O_CREAT|O_WRONLY|O_TRUNC, 0700)) == -1)){
perror("file problem");
exit(1);
}

while((n1=read(fd1, buffer, 1024) > 0)){
if(write(fd2, buffer, n1) != n1){
perror("writing problem ");
exit(3);
}
}
close(fd1);
close(fd2);
}

当我这样运行程序时:

cc copyContents.c 
./a.out one.txt two.txt

假设 one.txt 定义明确,我想要创建一个名为 two.txt 的新文件并复制 one 的所有内容.txt

当我在运行程序后查看 two.txt 的内容时,它实际上什么也没有。只是一个空白文件。

我哪里错了?

最佳答案

你写的

 while((n1=read(fd1, buffer, 1024) > 0)){

代替

 while ( (n1 = read(fd1, buffer, 1024)) > 0)

在您的代码中,while 条件的代码归结为:

n1 = (read(fd1, buffer, 1024) > 0)

因此读取正确完成,它的返回值与 0 进行比较,比较结果(0 或 1)分配给 n1

这再次表明以可读的方式格式化代码是多么重要。

您可以自己使用调试器或通过在代码中插入一两个 printf 来轻松调试。

关于使用标准 I/O 和系统调用制作文件副本的 C 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46099943/

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