我基本上是尝试使用fopen()
创建一个指向当前文件(argv[0]
)的FILE
指针,但它返回SegFault,我尝试打印错误并得到:文本文件忙碌。这是我得到的。显然错误在第14行if (localFile == NULL)
void copy(char *localFileName, char *targetFileName) {
int ch;
FILE *localFile = fopen(localFileName, "r+b");
FILE *targetFile = fopen(targetFileName, "r+b");
FILE *tempFile = fopen("tempFile.bin", "wb+");
if (tempFile == NULL) {
perror("tempFile");
}
if (targetFile == NULL) {
perror("targetFile");
}
if (localFile == NULL) {
perror("localFile");
}
while((ch = fgetc(localFile)) != EOF) {
fputc(ch, tempFile);
}
while ((ch = fgetc(targetFile)) != EOF) {
fputc(ch, tempFile);
}
fclose(localFile);
fclose(targetFile);
}
1条答案
按热度按时间iovurdzv1#
是的,这是可能的,但你应该意识到一些事情可能会使它变得困难:-)
argv[0]
会被设置为正在运行的程序的 * 实际 * 文件名。该标准只声明,在信息完全可用的情况下,它“表示程序名”。“表示”允许“prog”,“/full/path/to/prog”,“./relative/path/to/prog”,或者甚至是“位于应用程序目录中的prog程序”。所提供的是非常 * 非常 * 依赖于实现的(procfs
文件系统,如果可用的话,可能会提供更好的信息,比如来自/proc/self/exe
)。--x
模式),在这种情况下,即使分页系统没有锁定文件,您也无法打开文件进行阅读。