在这里,我尝试使用 open
read
和 write
系统调用将一个文件的内容复制到另一个文件(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);
}
提前致谢...
最佳答案
您的代码中有很多问题。
- 第一个也是最明显的一点是,您从不检查错误(
malloc
、open
、close
)。如果您想知道:是的,您确实需要检查close
。 - 那么您的
open
调用不正确,因为您没有指定文件访问模式。引用man 2 open
:参数标志必须包含以下访问模式之一:O_RDONLY、O_WRONLY 或 O_RDWR。
您在此处调用未定义的行为。 - 此外,您对 read 返回值的处理也是错误的。您只检查错误,但如果没有错误发生,您的程序将无限期循环。请注意,文件结尾不被视为错误。相反,
read
返回读取的字节数(您不检查)。文件结束时返回值为 0。 - 您的 main 函数没有返回值。尝试使用
-Wall -Wextra
运行gcc
或clang
以查看此类问题。 - 顺便说一下,强制转换
malloc
的返回值被认为是有害的。
关于使用系统调用将一个文件的内容复制到另一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17966022/