2016-12-05 6 views
2

getaddrinfo()システムコールまたはバストの章に記載されていることがわかったとき、私はhttp://beej.us/guide/bgnet/output/html/singlepage/bgnet.html#syscallsを読んでいました。getaddrinfo()はシステムコールですか?

私はDebian 8 Linuxシステム上で実際にシステムコールかどうか確認したいと思っていました。しかし、私はそれがシステムコールであるという証拠を見つけることはできません。

たとえば、私はプログラムfoo.cを書きました。

#include <stdio.h> 
#include <sys/types.h> 
#include <sys/socket.h> 
#include <netdb.h> 

int main() 
{ 
    struct addrinfo *ai; 
    int ret; 

    ret = getaddrinfo("localhost", "http", NULL, &ai); 
    printf("ret: %d\n", ret); 

    return 0; 
} 

私がコンパイルしstraceでこのプログラムを実行すると、私はgetaddrinfo()へのコールが表示されません。

$ gcc foo.c && strace ./a.out 
execve("./a.out", ["./a.out"], [/* 40 vars */]) = 0 
brk(0)         = 0x1190000 
access("/etc/ld.so.nohwcap", F_OK)  = -1 ENOENT (No such file or directory) 
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f99f5a59000 
access("/etc/ld.so.preload", R_OK)  = -1 ENOENT (No such file or directory) 
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 
fstat(3, {st_mode=S_IFREG|0644, st_size=76177, ...}) = 0 
mmap(NULL, 76177, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f99f5a46000 
close(3)        = 0 
access("/etc/ld.so.nohwcap", F_OK)  = -1 ENOENT (No such file or directory) 
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3 
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0P\34\2\0\0\0\0\0"..., 832) = 832 
fstat(3, {st_mode=S_IFREG|0755, st_size=1738176, ...}) = 0 
mmap(NULL, 3844640, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f99f5490000 
mprotect(0x7f99f5632000, 2093056, PROT_NONE) = 0 
mmap(0x7f99f5831000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1a1000) = 0x7f99f5831000 
mmap(0x7f99f5837000, 14880, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f99f5837000 
close(3)        = 0 
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f99f5a45000 
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f99f5a44000 
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f99f5a43000 
arch_prctl(ARCH_SET_FS, 0x7f99f5a44700) = 0 
mprotect(0x7f99f5831000, 16384, PROT_READ) = 0 
mprotect(0x7f99f5a5b000, 4096, PROT_READ) = 0 
munmap(0x7f99f5a46000, 76177)   = 0 
socket(PF_NETLINK, SOCK_RAW, NETLINK_ROUTE) = 3 
bind(3, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 0 
getsockname(3, {sa_family=AF_NETLINK, pid=24206, groups=00000000}, [12]) = 0 
sendto(3, "\24\0\0\0\26\0\1\3c\350DX\0\0\0\0\0\0\0\0", 20, 0, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 20 
recvmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"L\0\0\0\24\0\2\0c\350DX\216^\0\0\2\10\200\376\1\0\0\0\10\0\1\0\177\0\0\1"..., 4096}], msg_controllen=0, msg_flags=0}, 0) = 252 
recvmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"H\0\0\0\24\0\2\0c\350DX\216^\0\0\n\200\200\376\1\0\0\0\24\0\1\0\0\0\0\0"..., 4096}], msg_controllen=0, msg_flags=0}, 0) = 216 
recvmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"\24\0\0\0\3\0\2\0c\350DX\216^\0\0\0\0\0\0", 4096}], msg_controllen=0, msg_flags=0}, 0) = 20 
brk(0)         = 0x1190000 
brk(0x11b1000)       = 0x11b1000 
socket(PF_LOCAL, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 4 
connect(4, {sa_family=AF_LOCAL, sun_path="/var/run/nscd/socket"}, 110) = -1 ENOENT (No such file or directory) 
close(4)        = 0 
close(3)        = 0 
socket(PF_LOCAL, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 3 
connect(3, {sa_family=AF_LOCAL, sun_path="/var/run/nscd/socket"}, 110) = -1 ENOENT (No such file or directory) 
close(3)        = 0 
socket(PF_LOCAL, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 3 
connect(3, {sa_family=AF_LOCAL, sun_path="/var/run/nscd/socket"}, 110) = -1 ENOENT (No such file or directory) 
close(3)        = 0 
open("/etc/nsswitch.conf", O_RDONLY|O_CLOEXEC) = 3 
fstat(3, {st_mode=S_IFREG|0644, st_size=529, ...}) = 0 
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f99f5a58000 
read(3, "# /etc/nsswitch.conf\n#\n# Example"..., 4096) = 529 
read(3, "", 4096)      = 0 
close(3)        = 0 
munmap(0x7f99f5a58000, 4096)   = 0 
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 
fstat(3, {st_mode=S_IFREG|0644, st_size=76177, ...}) = 0 
mmap(NULL, 76177, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f99f5a46000 
close(3)        = 0 
access("/etc/ld.so.nohwcap", F_OK)  = -1 ENOENT (No such file or directory) 
open("/lib/x86_64-linux-gnu/tls/x86_64/libnss_db.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) 
stat("/lib/x86_64-linux-gnu/tls/x86_64", 0x7ffee66a14d0) = -1 ENOENT (No such file or directory) 
open("/lib/x86_64-linux-gnu/tls/libnss_db.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) 
stat("/lib/x86_64-linux-gnu/tls", 0x7ffee66a14d0) = -1 ENOENT (No such file or directory) 
open("/lib/x86_64-linux-gnu/x86_64/libnss_db.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) 
stat("/lib/x86_64-linux-gnu/x86_64", 0x7ffee66a14d0) = -1 ENOENT (No such file or directory) 
open("/lib/x86_64-linux-gnu/libnss_db.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) 
stat("/lib/x86_64-linux-gnu", {st_mode=S_IFDIR|0755, st_size=12288, ...}) = 0 
open("/usr/lib/x86_64-linux-gnu/tls/x86_64/libnss_db.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) 
stat("/usr/lib/x86_64-linux-gnu/tls/x86_64", 0x7ffee66a14d0) = -1 ENOENT (No such file or directory) 
open("/usr/lib/x86_64-linux-gnu/tls/libnss_db.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) 
stat("/usr/lib/x86_64-linux-gnu/tls", 0x7ffee66a14d0) = -1 ENOENT (No such file or directory) 
open("/usr/lib/x86_64-linux-gnu/x86_64/libnss_db.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) 
stat("/usr/lib/x86_64-linux-gnu/x86_64", 0x7ffee66a14d0) = -1 ENOENT (No such file or directory) 
open("/usr/lib/x86_64-linux-gnu/libnss_db.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) 
stat("/usr/lib/x86_64-linux-gnu", {st_mode=S_IFDIR|0755, st_size=49152, ...}) = 0 
open("/lib/tls/x86_64/libnss_db.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) 
stat("/lib/tls/x86_64", 0x7ffee66a14d0) = -1 ENOENT (No such file or directory) 
open("/lib/tls/libnss_db.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) 
stat("/lib/tls", 0x7ffee66a14d0)  = -1 ENOENT (No such file or directory) 
open("/lib/x86_64/libnss_db.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) 
stat("/lib/x86_64", 0x7ffee66a14d0)  = -1 ENOENT (No such file or directory) 
open("/lib/libnss_db.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) 
stat("/lib", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 
open("/usr/lib/tls/x86_64/libnss_db.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) 
stat("/usr/lib/tls/x86_64", 0x7ffee66a14d0) = -1 ENOENT (No such file or directory) 
open("/usr/lib/tls/libnss_db.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) 
stat("/usr/lib/tls", 0x7ffee66a14d0) = -1 ENOENT (No such file or directory) 
open("/usr/lib/x86_64/libnss_db.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) 
stat("/usr/lib/x86_64", 0x7ffee66a14d0) = -1 ENOENT (No such file or directory) 
open("/usr/lib/libnss_db.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) 
stat("/usr/lib", {st_mode=S_IFDIR|0755, st_size=12288, ...}) = 0 
munmap(0x7f99f5a46000, 76177)   = 0 
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 
fstat(3, {st_mode=S_IFREG|0644, st_size=76177, ...}) = 0 
mmap(NULL, 76177, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f99f5a46000 
close(3)        = 0 
access("/etc/ld.so.nohwcap", F_OK)  = -1 ENOENT (No such file or directory) 
open("/lib/x86_64-linux-gnu/libnss_files.so.2", O_RDONLY|O_CLOEXEC) = 3 
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\240\"\0\0\0\0\0\0"..., 832) = 832 
fstat(3, {st_mode=S_IFREG|0644, st_size=47712, ...}) = 0 
mmap(NULL, 2144392, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f99f5284000 
mprotect(0x7f99f528f000, 2093056, PROT_NONE) = 0 
mmap(0x7f99f548e000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xa000) = 0x7f99f548e000 
close(3)        = 0 
mprotect(0x7f99f548e000, 4096, PROT_READ) = 0 
munmap(0x7f99f5a46000, 76177)   = 0 
open("/etc/services", O_RDONLY|O_CLOEXEC) = 3 
fstat(3, {st_mode=S_IFREG|0644, st_size=19605, ...}) = 0 
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f99f5a58000 
read(3, "# Network services, Internet sty"..., 4096) = 4096 
close(3)        = 0 
munmap(0x7f99f5a58000, 4096)   = 0 
open("/etc/services", O_RDONLY|O_CLOEXEC) = 3 
fstat(3, {st_mode=S_IFREG|0644, st_size=19605, ...}) = 0 
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f99f5a58000 
read(3, "# Network services, Internet sty"..., 4096) = 4096 
close(3)        = 0 
munmap(0x7f99f5a58000, 4096)   = 0 
open("/etc/services", O_RDONLY|O_CLOEXEC) = 3 
fstat(3, {st_mode=S_IFREG|0644, st_size=19605, ...}) = 0 
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f99f5a58000 
read(3, "# Network services, Internet sty"..., 4096) = 4096 
read(3, "\t\t# IPX\nipx\t\t213/udp\nimap3\t\t220/"..., 4096) = 4096 
read(3, "nessus\t\t1241/tcp\t\t\t# Nessus vuln"..., 4096) = 4096 
read(3, "347/tcp\t\t\t# gnutella\ngnutella-rt"..., 4096) = 4096 
read(3, "ureg\t779/udp\t\tmoira_ureg\t# Moira"..., 4096) = 3221 
read(3, "", 4096)      = 0 
close(3)        = 0 
munmap(0x7f99f5a58000, 4096)   = 0 
open("/etc/services", O_RDONLY|O_CLOEXEC) = 3 
fstat(3, {st_mode=S_IFREG|0644, st_size=19605, ...}) = 0 
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f99f5a58000 
read(3, "# Network services, Internet sty"..., 4096) = 4096 
read(3, "\t\t# IPX\nipx\t\t213/udp\nimap3\t\t220/"..., 4096) = 4096 
read(3, "nessus\t\t1241/tcp\t\t\t# Nessus vuln"..., 4096) = 4096 
read(3, "347/tcp\t\t\t# gnutella\ngnutella-rt"..., 4096) = 4096 
read(3, "ureg\t779/udp\t\tmoira_ureg\t# Moira"..., 4096) = 3221 
read(3, "", 4096)      = 0 
close(3)        = 0 
munmap(0x7f99f5a58000, 4096)   = 0 
open("/etc/services", O_RDONLY|O_CLOEXEC) = 3 
fstat(3, {st_mode=S_IFREG|0644, st_size=19605, ...}) = 0 
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f99f5a58000 
read(3, "# Network services, Internet sty"..., 4096) = 4096 
read(3, "\t\t# IPX\nipx\t\t213/udp\nimap3\t\t220/"..., 4096) = 4096 
read(3, "nessus\t\t1241/tcp\t\t\t# Nessus vuln"..., 4096) = 4096 
read(3, "347/tcp\t\t\t# gnutella\ngnutella-rt"..., 4096) = 4096 
read(3, "ureg\t779/udp\t\tmoira_ureg\t# Moira"..., 4096) = 3221 
read(3, "", 4096)      = 0 
close(3)        = 0 
munmap(0x7f99f5a58000, 4096)   = 0 
open("/etc/services", O_RDONLY|O_CLOEXEC) = 3 
fstat(3, {st_mode=S_IFREG|0644, st_size=19605, ...}) = 0 
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f99f5a58000 
read(3, "# Network services, Internet sty"..., 4096) = 4096 
read(3, "\t\t# IPX\nipx\t\t213/udp\nimap3\t\t220/"..., 4096) = 4096 
read(3, "nessus\t\t1241/tcp\t\t\t# Nessus vuln"..., 4096) = 4096 
read(3, "347/tcp\t\t\t# gnutella\ngnutella-rt"..., 4096) = 4096 
read(3, "ureg\t779/udp\t\tmoira_ureg\t# Moira"..., 4096) = 3221 
read(3, "", 4096)      = 0 
close(3)        = 0 
munmap(0x7f99f5a58000, 4096)   = 0 
socket(PF_LOCAL, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 3 
connect(3, {sa_family=AF_LOCAL, sun_path="/var/run/nscd/socket"}, 110) = -1 ENOENT (No such file or directory) 
close(3)        = 0 
open("/etc/host.conf", O_RDONLY|O_CLOEXEC) = 3 
fstat(3, {st_mode=S_IFREG|0644, st_size=9, ...}) = 0 
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f99f5a58000 
read(3, "multi on\n", 4096)    = 9 
read(3, "", 4096)      = 0 
close(3)        = 0 
munmap(0x7f99f5a58000, 4096)   = 0 
getpid()        = 24206 
open("/etc/resolv.conf", O_RDONLY|O_CLOEXEC) = 3 
fstat(3, {st_mode=S_IFREG|0644, st_size=124, ...}) = 0 
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f99f5a58000 
read(3, "# Generated by NetworkManager\nse"..., 4096) = 124 
read(3, "", 4096)      = 0 
close(3)        = 0 
munmap(0x7f99f5a58000, 4096)   = 0 
open("/etc/hosts", O_RDONLY|O_CLOEXEC) = 3 
fstat(3, {st_mode=S_IFREG|0644, st_size=207, ...}) = 0 
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f99f5a58000 
read(3, "127.0.0.1\tlocalhost\n127.0.1.1\tde"..., 4096) = 207 
read(3, "", 4096)      = 0 
close(3)        = 0 
munmap(0x7f99f5a58000, 4096)   = 0 
open("/etc/gai.conf", O_RDONLY|O_CLOEXEC) = 3 
fstat(3, {st_mode=S_IFREG|0644, st_size=2584, ...}) = 0 
fstat(3, {st_mode=S_IFREG|0644, st_size=2584, ...}) = 0 
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f99f5a58000 
read(3, "# Configuration for getaddrinfo("..., 4096) = 2584 
read(3, "", 4096)      = 0 
close(3)        = 0 
munmap(0x7f99f5a58000, 4096)   = 0 
socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 3 
connect(3, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("127.0.0.1")}, 16) = 0 
getsockname(3, {sa_family=AF_INET, sin_port=htons(60650), sin_addr=inet_addr("127.0.0.1")}, [16]) = 0 
close(3)        = 0 
socket(PF_INET6, SOCK_DGRAM, IPPROTO_IP) = 3 
connect(3, {sa_family=AF_INET6, sin6_port=htons(80), inet_pton(AF_INET6, "::1", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, 28) = 0 
getsockname(3, {sa_family=AF_INET6, sin6_port=htons(51869), inet_pton(AF_INET6, "::1", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, [28]) = 0 
close(3)        = 0 
fstat(1, {st_mode=S_IFREG|0644, st_size=13847, ...}) = 0 
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f99f5a58000 
write(1, "ret: 0\n", 7ret: 0 
)     = 7 
exit_group(0)       = ? 
+++ exited with 0 +++ 

私はman syscallsで言及getaddrinfo()が表示されません。

$ man syscalls | grep getaddrinfo 
$ 

は、だから私はgetaddrinfo()が私のDebian Linuxシステム上のシステムコールではないと結論づけることができますか?

特定のUnixまたはLinuxシステムで特定の機能がシステムコールかどうかを明確に判断するには、より良い方法がありますか?

答えて

2

いいえ、そうではありません。あなたの調査はそれを証明します。

さらに、Linux syscalls tableで見つけることができます。またはman pageを開いて、それがどの章であるかを確認してください:2 - システムコール; 3 - c関数。

関連する問題