[LINUX] Eine kleine Notiz, die auf printf folgt
Annahme
Codebeispiel
test2.c
#include <stdio.h>
int main(int arg, char *argv[]){
printf("hello\n");
}
Memo
-
include ist keine C-Syntax, sondern eine Präprozessoranweisung
- In stdio.h gibt es viele Standardfunktionsdefinitionen
-
include erweitert nur den Inhalt von stdio.h
- Die Header-Datei enthält zwei Haupttypen.
--Was ist standardmäßig auf dem System installiert?
- #include <>
- Standard-Header-Dateien befinden sich in einem Verzeichnis namens / usr / include
- Wenn Sie sich stdio.h ansehen, steht dort "die GNU C-Bibliothek" und es gibt Code in glibc (wahrscheinlich)
- Bei der Suche nach "stdio.h" aus der glibc-Quelle bleiben 3 hängen
- Einige von / usr / include werden von anderen Quellen als glibc bereitgestellt (Linux-Kernel, andere Bibliotheken usw.)
――Es scheint weniger als zu sein
- / usr / include / *. h: Standard-C-Bibliothek
- / usr / include / sys / *. h: Wird vom Betriebssystemkern bereitgestellt
- / usr / include / net / *. h: Netzwerkbezogen
- Die Existenz von glibc scheint → (Ubuntu 16.04)
/ usr / lib / x86_64-linux-gnu /
zu sein
- Wenn Sie mit readelf überprüfen, gibt es printf.o.
--Wenn Sie nach printf.c suchen, gibt es im stdio-common-Verzeichnis unter der glibc-Quelle verschiedene Dinge wie diese.
- Wenn Sie in printf.c nachsehen, können Sie sehen, dass es "vfprintf" aufruft. (Hier enden)
- Lokale Dinge, die im Programm definiert sind
- #include ""
- Speicherort der Header-Datei
--stdio.h ist in glibc
Linux-Code usw.
command
ubuntu# ls /usr/include | grep stdio
stdio.h
stdio_ext.h
/usr/include/stdio.h
/* Define ISO C stdio on top of C++ iostreams.
Copyright (C) 1991-2016 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
command
ubuntu# find . -name "stdio.h"
./include/stdio.h
./libio/stdio.h
./libio/bits/stdio.h
commmand
ubuntu# readelf -a /usr/lib/x86_64-linux-gnu/libc.a | grep printf | grep -v "[a-z_]printf"
9: 0000000000000480 9125 FUNC LOCAL DEFAULT 1 printf_positional
Datei: libc.a(printf_fp.o)
Datei: libc.a(reg-printf.o)
Datei: libc.a(printf-prs.o)
Datei: libc.a(printf_fphex.o)
Datei: libc.a(printf_size.o)
28: 0000000000000000 2223 FUNC GLOBAL DEFAULT 1 printf_size
29: 00000000000008b0 31 FUNC GLOBAL DEFAULT 1 printf_size_info
Datei: libc.a(printf.o)
11: 0000000000000000 158 FUNC GLOBAL DEFAULT 1 printf
10: 0000000000000370 10733 FUNC LOCAL DEFAULT 1 printf_positional
Datei: libc.a(printf-parsemb.o)
Datei: libc.a(printf-parsewc.o)
Datei: libc.a(printf_chk.o)
command
# find . -name "*printf.c" | grep comm
./stdio-common/fprintf.c
./stdio-common/asprintf.c
./stdio-common/printf.c
./stdio-common/reg-printf.c
./stdio-common/tst-obprintf.c
./stdio-common/tst-swprintf.c
./stdio-common/tst-wc-printf.c
./stdio-common/fxprintf.c
./stdio-common/vprintf.c
./stdio-common/vfwprintf.c
./stdio-common/dprintf.c
./stdio-common/vfprintf.c
./stdio-common/test-vfprintf.c
./stdio-common/sprintf.c
./stdio-common/tst-printf.c
./stdio-common/tst-sprintf.c
./stdio-common/snprintf.c
stdio-common/printf.c(Auszug)
/* Write formatted output to stdout from the format string FORMAT. */
/* VARARGS1 */
int
__printf (const char *format, ...)
{
va_list arg;
int done;
va_start (arg, format);
done = vfprintf (stdout, format, arg);
va_end (arg);
return done;
}
Referenz
div>
< a href = "http://www.amazon.co.jp/exec/obidos/ASIN/B00O8GILDK/kuredev-22/ref=nosim/" name = "amazletlink" target = "_ blank"> Wirklich beängstigende C-Sprache strong> a>
gepostet mit
amazlet am 17.09.10 div> div>
Hidekazu-System (2014-10- 07)
Verkaufsranking: 101.714
div>