我很难进行系统调用以取消链接我的C代码中的文件工作。我希望在复制代码后从文件系统中删除该文件。我收到的错误是:
declared here extern int unlink (const char *__name) __THROW __nonnull ((1));
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <fcntl.h>
int main(int argc, char * args [])
{
int infile, outfile;
int numofbytesread;
char buffer[20];
infile = open(args[1], O_RDONLY, 0700);
if (infile == ENOENT)
{
printf("Could not find file");
return 1;
}
outfile == open(args[2], O_WRONLY | O_CREAT, 0700);
while ((numofbytesread = read(infile, buffer, 20))){
write(outfile, buffer, numofbytesread);
}
close(infile);
close(outfile);
unlink();
return 0;
}
答案 0 :(得分:4)
复制后,您可以调用unlink
系统调用。
unlink(args[1])
但请务必在删除文件之前检查副本是否成功。
参考:https://www.gnu.org/software/libc/manual/html_node/Deleting-Files.html
答案 1 :(得分:3)
如果你要做的就是调用unlink删除文件,这应该有效,因为unlink
采用文件路径。因此,如果您的输入文件路径有效并且在文件系统中它不是只读的,那么这应该有效。我测试了它,它对我有用。它将第一个参数指定的文件复制到第二个参数指定的文件,然后删除输入文件。我还修复了你的错误处理。
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <fcntl.h>
int main(int argc, char *args[]) {
int infile, outfile, readcnt;
char buffer[20];
if ((infile = open(args[1], O_RDONLY, 0700)) < 0) {
perror("Error openning input file");
return -1;
}
if ((outfile = open(args[2], O_WRONLY | O_CREAT, 0700)) < 0) {
perror("Error opening output file");
return -1;
}
while ((readcnt = read(infile, buffer, 20)) > 0) {
if (write(outfile, buffer, readcnt) < 1) {
perror("Error writing to output file");
return -1;
}
}
close(infile);
close(outfile);
if (unlink(args[1]) < 0) {
perror("Error unlinking file");
return -1;
}
return 0;
}