只测试文件描述符。我的目标是用fopen打开一个文件流,并使用fprintf将文件描述符整数值写回文件,看看我得到了什么结果。
(我决定使用fopen,fprintf等)因为它允许我写变量,write()不允许它,
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
int main ()
{
FILE *fp;
fp = fopen("wow.txt", "w+");
if (fp < 0)
{
printf("ERROR \n");
}
else
{
printf("we good \n");
}
fprintf(fp, "hi %p \n", fp);
}
我面临的问题是,如果我为fprintf语句写了%d ...我得到编译器错误。如果我写%p,我得到RAM中的地址。
是否可以获得绝对整数值...例如&#34; 3&#34;
答案 0 :(得分:5)
FILE *fp;
不是文件描述符,它是文件流指针,因此,您需要将其视为指针。
文件描述符是从open
或creat
之类的UNIXy调用返回的小整数,而文件指针是假设您处于甚至具有描述符的环境中,则高于该级别。
在这些环境中,您通常可以使用以下内容获取基础描述符:
int fd = fileno (fp);
以下完整程序(在CygWin下)显示了这一点:
#include <stdio.h>
int main (void) {
FILE *fp = fopen ("wow.txt", "w+");
if (fp < 0) {
printf ("ERROR\n");
return 1;
}
fprintf (fp, "fp=%p, fd=%d\n", fp, fileno (fp));
fclose (fp);
return 0;
}
用以下内容编译:
gcc -o testprog testprog.c
给出输出:
fp=0x800102a8, fd=3