这里我尝试使用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);
}
提前完成了......
答案 0 :(得分:0)
您的代码中存在很多问题。
malloc
,open
,close
)。如果您想知道:是的,您需要检查close
。open
来电不正确,因为您没有指定文件访问模式。引用man 2 open
:The argument flags must include one of the following access modes: O_RDONLY, O_WRONLY, or O_RDWR.
您正在此处调用未定义的行为。read
的返回值的处理也是错误的。您只检查错误,但如果没有错误发生,您的程序将无限循环。请注意,文件结尾不被视为错误。相反,read
返回读取的字节数(您不检查)。在文件结束时,返回值为0. gcc
运行clang
或-Wall -Wextra
以查看类似的问题。malloc
的返回值视为有害。