使用unlink删除文件

192*_*496 -1 c linux binaryfiles unlink

我想读取命令行参数中给出的文件,并在读取后删除它.这就是我正在做的事情.

char *filename = argv[1];
char *outputfile = strcat(argv[1], ".cmp");

fd = open(argv[1], O_RDONLY);
chars = read(fd, buf, BUFFERSIZE);
fd1 = creat(outputfile, 0644);
write(fd1, buf, BUFFERSIZE);
close(fd1);
close(fd);
unlink(argv[1]);
Run Code Online (Sandbox Code Playgroud)

如果我给"mytxt"在命令行中,代码应该创建"mytxt.cmp"文件并删除"mytxt",相反,它是删除"mytxt.cmp"保持"mytxt",因为它是.为什么会这样?如何删除命令行参数中给出的文件.

cni*_*tar 5

char *outputfile = strcat(argv[1], ".cmp");
Run Code Online (Sandbox Code Playgroud)

您正在修改argv[1]filename指向它.你可以尝试用一个新的字符串mallocsprintf-ing所需的值.

char *newstr = malloc(strlen(argv[1]) + strlen(".cmp") + 1);
sprintf(newstr, "%s.cmp", argv[1]);
Run Code Online (Sandbox Code Playgroud)

  • 不仅要修改,还要写完它的结尾 - >**UB!**. (3认同)