【发布时间】:2014-03-15 10:19:20
【问题描述】:
这是一个文件复制程序。
#include <stdio.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <stdlib.h>
int main()
{
int fd1,fd2, ndata;
char data[128];
char *openname[1], *creatname[1];
write(1, "Write open file name\n", 24); //user input
read(0, openname, 30 );
write(1, "Write creat file name\n", 25); //user input
read(0, creatname,30);
if((fd1 = open(openname, 0666))<0)
{
perror("cannot open the file");
exit(1);
}
if((fd2 = creat(creatname,0666))<0)
{
perror("cannot create the file");
exit(1);
}
while((ndata = read(fd1, data, 128))>0)
{
if((write(fd2, data, ndata))!=ndata)
{
perror("cannot write the file");
exit(1);
}
}
close(fd1);
close(fd2);
write(1, "File copy is done.",19);
return 0;
}
此代码不起作用。此代码打印错误消息:
cannot open the file.
但如果我将代码更改为:
if((fd1 = open("copy.c", 0666))<0)
还有这个:
if((fd2 = creat("real.c",0666))<0)
运作良好。
为什么会发生这个错误?请回答。
【问题讨论】:
-
perror将在cannot open the file之后显示一条解释errno的消息。对你有什么好处? -
对不起。那是 ENOENT :没有这样的文件或目录(POSIX.1)
-
您使用的变量
openname和creatname错误。通过实现断点来检查你在这些变量中得到了什么。
标签: c linux unix system-calls