下面是我的一个学习记录,不是详细的用法,但我觉得记录下来,至少这些东西需要知道,如果哪一块不清楚,再去查找相关的详细内容。
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
tar zcvf dst.tar file1 *.h 制作tgz
=====
makedepend:
makedepend -fmakefile 把依赖加到makefile末尾
=====
strip
strip
=====
prof
gprof
=====
kill
killall
=====
ipcs -s 检查信号量
ipcrm sem
ipcrm -s
ipcs -m 检查共享内存
ipcrm shm
ipcs -q
ipcrm msg
ulimit -c unlimited 打开core调试文件