编码是艺术

游戏编程

博客园 首页 新随笔 联系 订阅 管理

下面是我的一个学习记录,不是详细的用法,但我觉得记录下来,至少这些东西需要知道,如果哪一块不清楚,再去查找相关的详细内容。

 

linux程序开发:

文件操作
常用的三个重要设备
/dev/console
/dev/tty
/dev/null

设备驱动的底层函数
open
read
write
close
ioctl

三个已经打开的文件描述符
0 标准输入
1 标准输出
2 标准错误

打开文件标志
O_RDONLY
O_WRONLY
O_RDWR
O_APPEND
O_TRUNC
O_CREAT
O_EXCL

创建文件的权限
S_IRUSR
S_IWUSR
S_IXUSR
S_IRGRP
S_IWGRP
S_IXGRP
S_IROTH
S_IWOTH
S_IXOTH

R-读
W-写
X-执行

USR-属主
GRP-分组
OTH-其他用户

文件读写指针控制
lseek

文件状态访问
fstat
stat
lstat

S_ISUID
S_ISGID

S_IFMT
S_IRWXU
S_IRWXG
S_IRWXO

S_ISBLK
S_ISCHR
S_ISDIR
S_ISFIFO
S_ISREG
S_ISLNK

复制文件描述符
dup
dup2

标准I/O库
fopen/fclose
fread/fwrite
fflush
fseek
fgetc,getc,getchar/fputc,putc,putchar
fgets,gets/fputs,puts
printf,fprintf,sprintf/scanf,fscanf,sscanf
fgetpos/fsetpos
ftell
rewind
freopen
setvbuf
remove
ferror
feof
clearerr
fileno
fdopen

文件和子目录维护
chmod
chown

unlink
link
symlink
mkdir
rmdir
chdir
getcwd

opendir/closedir
readdir
telldir
seekdir

错误处理
strerror
perror

fcntl

mmap
msync
munmap

getopt

putenv 失败errno=ENOMEM
getenv

时间
time
difftime
gmtime
localtime
mktime
asctime
ctime
strftime
strptime

临时文件
tmpnam
tmpfile
mktemp
mkstemp

用户个人资料
getuid
getlogin
getpwuid
getpwnam
endpwent
getpwent
setpwent

主机资料
gethostname
uname
gethostid

日志记录
syslog
closelog
openlog
setlogmask
getpid
getppid

资源和限制
getpriority
setpriority
getrlimit
setrlimit
getrusage

终端
isatty
"/dev/tty"

ncurses
termios.h
termios
tcgetattr
tcsetattr
cfgetispeed
cfgetospeed
cfsetispeed
cfsetospeed
tcdrain
tcflow
tcflush
setupterm
tigetflag
tigetnum
tigetstr
tparm
putp
tputs

数据管理
malloc
free
calloc
realloc

文件锁
open O_EXCL
fcntl F_GETLK F_SETLK F_SETLKW
lockf

数据库

dbm_open
dbm_store
dbm_fetch
dbm_close
dbm_delete
dbm_error
dbm_clearerr
dbm_firstkey
dbm_nextkey

进程
system
execl
execlp
execle
execv
execvp
execve
fork
wait
waitpid
建立一个core文件放在运行子目录里调试核心。

信号
signal
kill
alarm
pause
sigaction
sigaddset(sigset_t *set, int signo)
sigemptyset
sigfillset
sigdelset
sigismember
sigprocmask
sigpending
sigsuspend

线程
pthread_create
pthread_exit
pthread_join
必须定义宏 _REENTRANT
sem_init
sem_wait
sem_post
sem_trywait
sem_destroy
pthread_mutex_init
pthread_mutex_lock
pthread_mutex_unlock
pthread_mutex_destroy
pthread_attr_init
pthread_attr_setdetachstate
pthread_attr_getdetachstate
pthread_attr_setschedpolicy
pthread_attr_getschedpolicy
pthread_attr_setschedparam
pthread_attr_getschedparam
pthread_attr_setinheritsched
pthread_attr_getinheritsched
pthread_attr_setscope
pthread_attr_getscope
pthread_attr_setstacksize
pthread_attr_getstacksize
pthread_cancel
pthread_setcancelstate
pthread_setcanceltype

进程间通讯
popen
pclose
pipe

信号量
semctl
semget
semop

消息队列
msgctl
msgget
msgrcv
msgsnd

共享内存
shmat
shmctl
shmdt
shmget

套接字
socket
bind
listen
accept
connect
gethostbyaddr
gethostbyname
gerservbyname
getservbyport
inet_ntos
gethostname
setsockopt
select

 

=====
调整进程优先级:
nice 优先级降低10点
renice  优先级加N点

=====
ps:

ps -af 产看正在运行的进程
ps -ax 察看系统进程
ps -l 察看进程优先级
ps -f 长格式输出

=====
gcc:

gcc test.c -o test 编译一个c程序为可执行程序
gcc -Wformat 可以检查fprintf格式串中的需求参数个数是否得到满足
gcc -g -g2 -g3 调试程序必须的选项,会加入调试信息和调试所需的编译方法
gcc -I/usr/include/ncurses -lncurses 增加包含目录和链接相应的库
gcc -E 只进行语法检测,不真正编译。
gcc -c 编译文件生成.o文件
gcc -MM 生成依赖清单
gcc -p -pg 记录性能,产生报告用

=====
gdb:

gdb -q test   调试test程序

l - list   察看源代码
b - breakpoint   设置断点
r - run   运行程序
n - next  运行到下一行
s - step  执行到下一行,会进入所调的函数
p - print   显示变量值
                        给变量赋值 p v = val
c - continue  继续运行
q - quit   退出调试
display   监视某个变量,每次执行下一步都会显示

info display  察看已经监视的所有变量
info break  察看所有断点

disable display 1 关闭监视的1号变量
enable break 1  打开1号断点

delete display   删除被监视的变量
ba - backtrace          堆栈跟踪
commands   在指定断点时要执行的命令

=====
make:

make -n 不实际执行命令,列出将会执行的操作步骤
make -n install 模拟安装
make -k 遇到错误不停止
make -f 指定makefile文件名

make -p 打印内建规则
make foo
CC foo.c -o foo
make CC = gcc CFLAGS = "-Wall -g" foo
gcc -Wall -g foo.c -o foo

make -jN 同时执行N个命令

=====
makefile:

: 依赖关系,一般会有一个all: 如果没有all就会找第一个xxx:
规则所在行必须用制表符开始,空格是不行的;
不能以空格作为行尾,会执行失败。
make CC=gcc 替换makefile中的宏定义
CC=C89 宏定义
$(CC) 宏使用
$? 当前目标最近一次修改时的改动清单
$@ 当前目标的名字
$< 现在正被处理着的文件名字
$* 现在正被处理着的文件名字,不带后缀
- 命令前加'-'号,不输出任何错误信息
@ 命令前加'@'号,不输出命令本身
&& 执行命令必须逐个执行成功,遇到错误的就停止后续执行
\ 为了让所有命令启动一个shell把所有命令连接起来
.SUFFIXES: .cpp
cpp.o:
 $(CC) -xc++ $(CFLAGS) -I$(INCLUDE) -c $<
定义了cpp文件的编译新规则
MYLIB = mylib.a
$(MYLIB): $(MYLIB)(*.o)
mylib.a:
 (cd mylibdirectory; $(MAKE))
=====
tar:

tar zxvf <filename> 解压.gz文件
tar zcvf dst.tar file1 *.h 制作tgz

=====
makedepend:
makedepend -fmakefile 把依赖加到makefile末尾

=====
strip
strip <file> 不重新编译删除调试信息

=====
prof
gprof

=====
kill
killall
=====
ipcs -s  检查信号量
ipcrm sem <id>
ipcrm -s <id> 不同系统上不一样的清除信号量方法
ipcs -m 检查共享内存
ipcrm shm <id>
ipcs -q
ipcrm msg <id>
ulimit -c unlimited 打开core调试文件

posted on 2008-07-30 21:22  宋良  阅读(567)  评论(0编辑  收藏  举报