将文件描述符的整数值写入文件

时间:2014-12-15 00:42:55

标签: c unix

只测试文件描述符。我的目标是用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;

1 个答案:

答案 0 :(得分:5)

FILE *fp;

不是文件描述符,它是文件流指针,因此,您需要将其视为指针。

文件描述符是从opencreat之类的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