这个想法是,main打开几个文件,并在给定的条件下写入它们,fp通过ref在这里和那里传递,而writerresult负责保存在实际文件中。我们能知道它正在写入哪个文件吗?
#include <stdio.h>
#include <string.h>
void Write2File(char *iMessage, FILE *fp)
{
fprintf(fp, "%s\n", iMessage);
// can i know in here where it is printing ?
}
int main(int argc, const char * argv[])
{
FILE *fp1, *fp2, *fp3, *fp4;
char message[250];
memset(message, '\0', 250);
strncpy(message, "sample text", 10);
fp1 = fopen("./output1.txt", "w+");
fp2 = fopen("./output2.txt", "w+");
fp3 = fopen("./output3.txt", "w+");
fp4 = fopen("./output4.txt", "w+");
Write2File(message, fp1);
Write2File(message, fp2);
Write2File(message, fp3);
Write2File(message, fp4);
fclose(fp1);
fclose(fp2);
fclose(fp3);
fclose(fp4);
return 0;
}
3条答案
按热度按时间zour9fqk1#
这是特定于操作系统的,没有标准的方法。如果你想一致地做,你可以定义一些数据结构,它将沿着FILE句柄保存路径名,并传递它而不是普通的FILE:
通常,文件流和磁盘文件之间没有直接的对应关系(装置、插座、pipe)或磁盘文件,这些文件可以通过文件系统中的许多不同名称进行访问,或者已被删除,不再可以访问。另一方面,您可以使用/proc文件系统检查哪些文件对应不同的文件描述符。这是vim示例编辑/etc/hosts通过/proc镜头的样子:
wljmcqd82#
您没有任何东西可供比较,也没有从
FILE
获取文件的标准方法。当然,如果你真的想,总有一些特定于实现的方法来挖掘数据,用于调试等。
无论如何,为什么要你的亚常规护理?
你最好有一些非常好的理由来解释这种严重的封装破坏。
20jt8wwn3#
不,在C中不能。但是你可以将FILE指针作为全局指针,并在函数Write2File()中比较它们。
或者,您可以向Write2File()函数添加一个额外的参数,以了解它引用的文件