Тестовая платформа - 32 бит x64 Linux, coreutils 8.5.Почему stdout не равен 1 в gnu coreutils?
В исходном коде base64, FWRITE будет использовать стандартный вывод для вывода строки в кодировке Base64
Когда я использую ltrace для печати всех вызов LibC, мы можем видеть, что STDOUT равно 0xb772da20
__libc_start_main(0x8048eb0, 2, 0xbf892f74, 0x804cb50, 0x804cbc0 <unfinished ...> strrchr("base64", '/') = NULL setlocale(6, "") = "en_US.UTF-8" bindtextdomain("coreutils", "/usr/share/locale") = "/usr/share/locale" textdomain("coreutils") = "coreutils" __cxa_atexit(0x804a3b0, 0, 0, 0xbf892f74, 2) = 0 getopt_long(2, 0xbf892f74, "diw:", 0x0804d1a0, NULL) = -1 fopen64("testbase64", "rb") = 0x8591878 fileno(0x8591878) = 3 posix_fadvise64(3, 0, 0, 0, 0) = 0 fread_unlocked(0xbf89225c, 1, 3072, 0x8591878) = 900 fwrite_unlocked("Ly8gcXVpY2tTb3J0LmMKI2luY2x1ZGUg"..., 1, 76, 0xb772da20) = 76
Когда я изменить код базы 64, как это:
int main (int argc, char **argv) { printf("%p \n", stdout); int opt; FILE *input_fh; const char *infile; .....
Выход еще 0xb772da20, это странно для меня, как это первая линия base64.c.
Я Grep в Lib папку Coreutils
grep stdout *.h
, и я не вижу никаких предопределить в стандартный вывод.
Может ли кто-нибудь помочь мне решить, почему stdout будет определяться как «0xb772da20», а не 1, а не 0?
related: http://stackoverflow.com/questions/21451895/why-stdout-cant-be-subestровано – box
Чтобы напечатать значение указателя, наведите его на 'void *'. Обычно это не имеет значения, но «void *» и другие типы указателей не гарантируют того же представления или передаются так же, как и аргументы. 'printf ("% p \ n ", (void *) stdout);' –