C语言 如何通过文件指针获得文件名? c语言里有办法通过文件指针获取文件名吗

C\u8bed\u8a00\u662f\u5426\u53ef\u4ee5\u901a\u8fc7\u6587\u4ef6\u6307\u9488\u5f97\u5230\u6587\u4ef6\u540d\uff1f

\u6bd4\u8f83\u96be\uff0c\u4f46\u5e76\u975e\u6ca1\u53ef\u80fd\u3002

\u89c6\u7a97\u7cfb\u7edf\uff0c\u89c1\uff1a
http://msdn.microsoft.com/en-us/library/aa366789(VS.85).aspx
\u8981\u505a\u989d\u5916\u5de5\u4f5c\uff0c\u7528 _get_osfhandle() \u83b7\u53d6\u89c6\u7a97\u6587\u4ef6\u53e5\u67c4\u3002

linux \u7cfb\u7edf\uff0c\u6709\u4eba\u7ed9\u51fa\u901a\u8fc7\u6587\u4ef6\u6307\u9488\u5f97\u5230\u6587\u4ef6\u540d\u4f8b\u5b50\uff1a
#include
#include
#include

int main(void)
{
char path[1024];
char result[1024];

/* Open a file, get the file descriptor. */
FILE*f = fopen("/etc/passwd","r");
int fd = fileno(f);

/* Read out the link to our file descriptor. */
sprintf(path,"/proc/self/fd/%d", fd);
memset(result,0,sizeof(result));
readlink(path, result,sizeof(result)-1);

/* Print the result. */
printf("%s\n", result);
}

\u82e5\u662f\u6587\u672c\u6587\u4ef6, \u4ee3\u7801\u5982\u4e0b: #include // \u4e3a\u4e86\u4f7f\u7528FILE, fgets \u7b49

#define MAXSIZE 1024int main(void) {char buffer[MAXSIZE];// \u58f0\u660e\u4e00\u4e2a\u8db3\u591f\u5927\u7684\u7a7a\u95f4\u6765\u5b58\u653e\u5185\u5bb9

在tc20中,一旦你成功打开一个文件,他将返回一个文件指针。

        FILE *fp;

              fp=fopen("abc.dat",文件状态(如w,r,r+));

当上面的操作成功后文件指针fp就会赋予你打开文件的最基本信息!

FILE结构在Turbo C在stdio.h文件中有以下的文件类型声明: 

typedef struct 

     short level;                 /*缓冲区“满”或“空”的程度*/ 

     unsigned flags;              /*文件状态标志*/ 

     char fd;                    /*文件描述符(句柄)*/ 

     unsigned char hold;          /*如无缓冲区不读取字符*/ 

     short bsize;                 /*缓冲区的大小*/ 

     unsigned char *buffer;        /*数据缓冲区的位置*/ 

     unsigned ar *curp;           /*指针,当前的指向*/ 

     unsigned istemp;            /*临时文件,指示器*/ 

     short token;                /*用于有效性检查*/ 

}FILE; 

为管理你打开的文件,操作系统为所有的文件创建一个打开文件信息的结构数组---文件控制块(FCB),而文件描述符就承担了访问与之对应的文件控制块的使命,他在c中就充当文件句柄。每一个文件都需要唯一的一个标识,这样才能管理若干个文件

FCB他存贮这你所有打开文件的信息,而只有通过文件句柄才能访问与之对应的FCB,从而访问你的文件.

文件句柄,就是FCB结构数组的下标

所以,通过文件指针获得文件名的操作路线:

FILE *fp;

char  fd = fp->fd;

FCB *fcb;

char *filiname = fcb[fd].filiname

利用FCB(文件控制块)操作的例子见:

http://www.asmedu.net/blog/user/postcontent.jsp?neighborId=8747&kindLevel=1&kindId=24655&postId=40710&readSg=1



比较难,但并非没可能。

视窗系统,见:
http://msdn.microsoft.com/en-us/library/aa366789(VS.85).aspx
要做额外工作,用 _get_osfhandle() 获取视窗文件句柄。

linux 系统,有人给出通过文件指针得到文件名例子:
#include<stdio.h>
#include<unistd.h>
#include<string.h>

int main(void)
{
char path[1024];
char result[1024];

/* Open a file, get the file descriptor. */
FILE*f = fopen("/etc/passwd","r");
int fd = fileno(f);

/* Read out the link to our file descriptor. */
sprintf(path,"/proc/self/fd/%d", fd);
memset(result,0,sizeof(result));
readlink(path, result,sizeof(result)-1);

/* Print the result. */
printf("%s\n", result);
}

C语言中,文件FILE的概念:此前,我们所熟悉的输入与输出都只是涉及到键盘及显示器,但是完全不够;这时,解决的办法是:将这些需要记录的数据,记录到某些介质上,利用介质的存储特性,携带或永久保存数据,这些记录在外部介质上的数据的集合称为“文件”;
按照数据在介质上的存放方式,分为文本文件和二进制文件;
打开及关闭文件举例:
fopen(文件名,文件使用方式)
fclose(文件指针)

fopen(文件名,文件使用方式) fclose(文件指针) 就是打开系统中的C语言文件的打开是通过stdio.h函数库的fopen()函数实现的。它的调用方式一般

_findnext(handle,&FileInfo);handle就是指针值,FileInfo是一个结构体,具体是:struct _finddata_t FileInfo.

扩展阅读:c语言必背100代码 ... c语言读取文件每一行 ... 指针的类型有哪些c语言 ... c语言编程自学 ... c语言指针知识点及重难点 ... 文件指针实际上是什么 ... c语言指针的指针实例 ... c语言指针交换 ... c语言指针什么时候加星号 ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网