linux C 学习笔记(非常初级 )
从以前的笔记中找到的,simple but useful
=============================
调试:
gdb
list //list code
run
kill //end debug
n=next
quit //terminate gdb
break lineofcode
delete break(breakpoints) numofbreak
watch
gdb基本命令2
----------------------------
命令 描述
break(或b) 行号 在某一行设置断点
break 函数名 在某个函数开头设置断点
break ... if ... 设置条件断点
continue(或c) 从当前位置开始连续运行程序
delete breakpoints 断点号 删除断点
display 变量名 跟踪查看某个变量,每次停下来都显示它的值
disable breakpoints 断点号 禁用断点
enable 断点号 启用断点
info(或i) breakpoints 查看当前设置了哪些断点
run(或r) 从头开始连续运行程序
undisplay 跟踪显示号 取消跟踪显示
=============================
编译:
gcc -Wall 可显示 编译 的warning
gcc -Istack 告诉gcc,头文件要到子目录stack里面找
gcc main.c -L. -lstack -Istack -o main //-L选项告诉编译器去哪里找需要的库文件,-L.表示在当前目录找。-lstack告诉编译器要链接libstack库,-I选项告诉编译器去哪里找头文件。注意,即使库文件就在当前目录,编译器默认也不会去找的,所以-L.选项不能少。
=============================
库:
ar rs //编译成静态库:ar rs libstack.a stack.o push.o pop.o is_empty.o
gcc -shared -o libstack.so stack.o push.o pop.o is_empty.o //编译成共享库
使用共享库可以很方便地升级库文件而不需要重新编译应用程序,这是静态库所没有的优点。
=============================
链接:
函数声明时,空参数时,参数写 void
Internal Linkage 如果用static关键字修饰一个函数声明,则表示该标识符具有Internal Linkage
External Linkage
include:对于用角括号包含的头文件,gcc首先查找-I选项指定的目录,然后查找系统的头文件目录(通常是/usr/include)。对于用引号包含的头文件,gcc首先查找包含头文件的.c文件所在的目录,然后查找-I选项指定的目录,然后查找系统的头文件目录。
=============================
man page
表 3.1. Man Page的Section
Section 描述
1 用户命令,例如ls(1)
2 系统调用,例如_exit(2)
3 库函数,例如printf(3)
4 特殊文件,例如null(4)描述了设备文件/dev/null、/dev/zero的作用
5 系统配置文件的格式,例如passwd(5)描述了系统配置文件/etc/passwd的格式
6 游戏
7 其它杂项,例如bash-builtins(7)描述了bash的各种内建命令
8 系统管理命令,例如ifconfig(8)
例如看C函数printf
man 3 printf
============================
语法:
============================
结构体:
结构体的定义声明 本质上跟基本类型是一样的,
int i,j;
struct complex_struct{
double x,y;
}z1,z2;
----------
int i=2;
struct complex_struct z={3.0,4.0};
----------
但是,不能这样使用:
struct comlex_struct z1;
z1={3.0,4.0};
----------
每个复数变量都有两个成员(Member)x和y,可以用.运算符(.号,Period)来访问,这两个成员的存储空间是相邻的
============================
数组
对于数组类型有一条特殊规则:数组类型做右值使用时,自动转换成指向数组首元素的指针。
============================
文件和目录操作的系统函数
access(2)函数检查执行当前进程的用户是否有权限访问某个文件
chmod(2)和fchmod(2)函数改变文件的访问权限
chown(2)/fchown(2)/lchown(2)改变文件的所有者和组
utime(2)函数改变文件的访问时间和修改时间
truncate(2)和ftruncate(2)函数把文件截断到某个长度
link(2)函数创建硬链接,其原理是在目录的数据块中添加一条新记录
unlink(2)函数删除一个链接
rename(2)函数改变文件名
readlink(2)函数读取一个符号链接所指向的目标路径
mkdir(2)函数创建新的目录
rmdir(2)函数删除一个目录,这个目录必须是空的(只包含.和..)才能删除
opendir(3)/readdir(3)/closedir(3)用于遍历目录数据块中的记录
opendir打开一个目录,返回一个DIR *指针代表这个目录,它是一个类似FILE *指针的句柄,
closedir用于关闭这个句柄,把DIR *指针传给readdir读取目录数据块中的记录,每次返回一个指向struct dirent的指针,反复读就可以遍历所有记录,所有记录遍历完之后readdir返回NULL。
============================