使用系统调用将一个文件的内容复制到另一个文件

标签 c unix system-calls

在这里,我尝试使用 open readwrite 系统调用将一个文件的内容复制到另一个文件(unix)中,但是对于出于某种原因,代码无限期地运行...... 我没有收到错误,所以如果你能帮助我!!

#include<unistd.h>
#include<stdio.h>
#include<sys/types.h>
#include<fcntl.h>
#include<stdlib.h>
#include<string.h>
int main(int args,char *ar[])
{
char *source=ar[1];
char *dest="def.txt";
char *buf=(char *)malloc(sizeof(char)*120);
int fd1,fd2;
fd1=open(source,O_CREAT,0744);
fd2=open(dest,O_CREAT,0744);
while(read(fd1,buf,120)!=-1)
{
printf("%s",buf);
//printf("Processing\n");
write(fd2,buf,120);
}
printf("Process Done");
close(fd1);
close(fd2);
}

提前致谢...

最佳答案

您的代码中有很多问题。

  • 第一个也是最明显的一点是,您从不检查错误(mallocopenclose)。如果您想知道:是的,您确实需要检查close
  • 那么您的 open 调用不正确,因为您没有指定文件访问模式。引用 man 2 open:参数标志必须包含以下访问模式之一:O_RDONLY、O_WRONLY 或 O_RDWR。您在此处调用未定义的行为。
  • 此外,您对 read 返回值的处理也是错误的。您只检查错误,但如果没有错误发生,您的程序将无限期循环。请注意,文件结尾不被视为错误。相反,read 返回读取的字节数(您不检查)。文件结束时返回值为 0。
  • 您的 main 函数没有返回值。尝试使用 -Wall -Wextra 运行 gccclang 以查看此类问题。
  • 顺便说一下,强制转换 malloc 的返回值被认为是有害的。

关于使用系统调用将一个文件的内容复制到另一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17966022/

相关文章:

c - fork() c 中的两个子进程

pthreads - pthread的调度方法?

c - 在子进程和父进程之间发送数据时如何使用两个管道?

mysql - 通过编辑 .bash_profile 改变 $PATH

linux - 什么是分页以及为什么它很重要

java - JVM JIT 是否生成系统调用指令?

macos - Mac OS X 上 sched.h 中的 clone() 方法在哪里

c - 仅通过 C 中的错误处理强制输入为正数

c - 为什么在参数列表前加一个 "_"

c - 预处理器宏字符串化