2007-09-12

sys_calls

/usr/include/asm/unistd.h (sys/syscall.h)
the system call numbers:

sys_call namesys_call num.(hex)
restart_syscall0
_exit1
fork2
read3
write4
open5
close6
waitpid7
create8
link9
unlinka
execveb
chdirc
timed
mknode
chmodf
lchown10
break11
oldstat12
lseek13
getpid14
mount15
oldumount16
setuid17
getuid18
stime19
ptrace1a
alarm1b
oldfstat1c
pause1d
utime1e
stty1f
gtty20
access21
nice22
ftime23
sync24
kill25
rename26
mkdir27
rmdir28
dup29
pipe2a
times2b
prof2c
brk2d
setgid2e
getgid2f
signal30
geteuid31
getegid32
acct33
umount234
lock35
ioctl36
fcntl37
mpx38
setpgid39
ulimit3a
oldolduname3b
umask3c
chroot3d
ustat3e
dup23f
getppid40
getpgrp41
setsid42
sigaction43
sgetmask44
ssetmask45
setreuid46
setregid47
sigsuspend48
sigpending49
sethostname4a
setrlimit4b
getrlimit4c /* Back compatible 2Gig limited rlimit */
getrusage4d
gettimeofday4e
settimeofday4f
getgroups50
setgroups51
select52
symlink53
oldlstat54
readlink55
uselib56
swapon57
reboot58
readdir59
mmap5a
munmap5b
truncate5c
ftruncate5d
fchmod5e
fchown5f
getpriority60
setpriority61
profil62
statfs63
fstatfs64
ioperm65
socketcall66
syslog67
settimer68
gettimer69
stat6a
lstat6b
fstat6c
olduname6d
iopl6e
vhangup6f
idle70
vm86old71
wait472
swapoff73
sysinfo74
ipc75
fsync76
sigreturn77
clone78
setdomainname79
uname7a
modify_ldt7b
adjtimex7c
mprotect7d
sigprocmask7e
create_module7f
init_module80
delete_module81
get_kernel_syms82
quotactl83
getpgid84
fchdir85
dbflush86
sysfs87
personality88
afs_syscall89 /* Syscall for Andrew File System */
setfsuid8a
setfsgid8b
_llseek8c
getdents8d
_newselect8e
flock8f
msync90
readv91
writev92
getsid93
fdatasync94
_sysctl95
mlock96
munlock97
mlockall98
munlockall99
sched_setparam9a
sched_getparam9b
sched_setscheduler9c
sched_getscheduler9d
sched_yield9e
sched_get_priority_max9f
sched_set_priority_mina0
sched_rr_get_intervala1
nanosleepa2
mremapa3
setresuida4
getresuida5
vm86a6
query_modulea7
polla8
nfsservctla9
setresgidaa
getresgidab
prctlac
rt_sigreturnad
rt_sigactionae
rt_sigprocmaskaf
rt_sigpendingb0
rt_sigtimedwaitb1
rt_sigqueueinfob2
rt_sigsuspendb3
pread64b4
pwrite64b5
chownb6
getcwdb7
capgetb8
capsetb9
sigaltstackba
sendfilebb
getpmsgbc /* some people actually want streams */
putpmsgbd /* some people actually want streams */
vforkbe
ugetrlimitbf /* SuS compliant getrlimit */
mmap2c0
truncate64c1
ftruncate64c3
tkillee
io_setupf5
io_destoryf6
io_geteventsf7
io_submitf8
io_cancelf9
exit_groupfc
timer_create103
timer_settime104
timer_gettime105
timer_getoverrun106
timer_delete107
clock_settime108
clock_gettime109
clock_getres10a
clock_nanosleep10b
tgkill10e
utimes10f
kexec_load11b
waitid11c
/* sys_setaltroot11d */
add_key11e
request_key11f
keyctl120
ioprio_set121
ioprio_get122
inotify_init123
inotify_add_watch124
inotify_rm_watch125
migrate_pages126
openat127
mkdirat128
mknodat129
fchownat12a
futimesat12b
fstatat6412c
unlinkat12d
renameat12e
linkat12f
symlinkat130
readlinkat131
fchmodat132
faccessat133
getcpu13e


//EOF Read More...

2007-09-03

位域

位域是C语言里面比较高级的特性,在结构体中比较常见。
现在在嵌入式开发中还比较常用,主要是能够节约内存空间。
如:

typedef struct {
    short int    flag_a: 1;    /* 在内存中只占 1 bit
                               * 超出可能会向高位覆写
                               * 但也可能丢失高位,由编译器而定 */

    short int    flag_b: 1;    /* 占 1 bit */
    short int    flag_c: 4;    /* 占 4 bits */
    short int    flag_d: 2;    /* 占 2 bits */
    short int    flag_e;       /* 占 16 bits */
} flags;
/* 这里整个结构体在内存中只占用了 4 Bytes */
/* 但还要注意:分配内存时还要考虑内存对齐原则,
 * 如,上面 flag_d 之后到 flag_e 之间,内存还有 8bits 的空余。
 * 所以 请尽量把位域字段放在一块儿!
 * 如果在 flag_e 之后再添加一个 flag_f: 8 的话,空间是只会向后扩展
 * 而不会插入 flag_d 和 flag_e 之间空余空间的。
 */

// EOF Read More...