文件内容代表什么*

时间:2016-04-08 13:56:40

标签: c linux unix file-descriptor

我有这个程序

#include <stdio.h>
#include <unistd.h>
#include <sys/socket.h>
#include <fcntl.h>

int main(void)
{
    FILE* f = fopen("/Users/user/a.cc", "rb");
    printf("%i\n", f);  // 1976385616
    printf("%i\n", *f);  // 1976385768

    int sockfd = socket(AF_UNIX, SOCK_STREAM, 0);
    printf("%i\n", sockfd);  // 4

    fclose(f);
    close(sockfd);

    int fd = open("/Users/user/a.cc", O_TRUNC | O_WRONLY, 0);
    printf("%i\n", (int) fd); // 3
    close(fd);
}

我知道34代表文件描述符,0,1,2分别为stdinstdoutstderr。显然fopen没有使用文件描述符。

FILE*的价值代表什么? fopen如果没有文件描述符怎么办?

1 个答案:

答案 0 :(得分:1)

  

FILE *的值代表什么?

它是指向FILE结构的指针,对于glibc,它的定义是here。除其他外,其中包含文件描述符。您可以使用POSIX fileno函数从FILE*获取文件描述符。

有关详细信息,您可能需要查看Interaction of File Descriptors and Standard I/O Streams