Linux程序设计-读书笔记2

来源:互联网 发布:淘宝图片拍摄 编辑:程序博客网 时间:2024/06/05 05:39
chap 4
1.处理命令行的命令:int getopt(int argc, char * const argv[], const char *optstring)
该函数optstring用于接收选项字符串(命令行中以-标识),后跟:表示选项需要接收一个值,与该函数同时使用的还有全局变量optargs用于记录选项参数冒号后面跟的值,如果没有,记录为?。optint用于记录当前处理到那个选项参数。该函数返回值是argv中下一个选项字符,处理完毕,返回-1。getopt_long用法同getopt,但是可以接收以--开头的参数。
2.环境变量相关函数:
int putenv(const char *string)用于将string写入环境变量。
char *getenv(const char *name)用于获取环境变量name的值。
系统全局变量extern char**environ指向所有的环境变量,可用于环境变量遍历。
3.UNIX以19700101000000作为时间记录的原点,用time_t类型的参数记录超过该时间的秒数。
获取时间:time_t cur=time((time_t *)0);
比较时间:difftime(time1,time2),返回类型是double!
分解时间:struct tm *gmtime(const time_t time),tm成员变量包括tm_sec、tm_min、tm_hour。
还原时间:time_t mktime(struct tm *timeptr)
获取当地时区的时间:struct tm *localtime(const time_t time)
返回时间常见格式字符串:char *ctime(time_t time)/char *asctime(struct tm *time)
控制时间格式:size_t strftime(char *s,size_t maxsize,const char* format,structtm* tmer)格式化tmer结构,将字符串放到s中。
4.临时文件
使用函数char *tmpname(char *s)能够生成一个临时文件名,然后使用FILE *tmpfile(void)函数能够打开这个文件。
此外还可以使用mktmp和mkstem函数生成临时文件,这两个函数能够对临时文件命令和文件存储位置进行控制。
5.使用getuid获取程序的uid(启动改程序用户的uid,类型为uid_t),getlogin获取启动该程序的用户名。gethostname(char
*name,size_t len)获取机器网络名,uname(struct utsname *name)获取主机更多信息。getpid获取程序的进程号。




chap 5 and chap 6
terminal and curses...




chap 7
1.Unix/Linux提供多种方法用于文件锁定。方法一:以原子操作的方式创建锁文件,全部锁定。方法二:锁文件锁定文件的一部分,使得程序可以独享该部分的访问,区域锁定。
2.锁文件仅仅是个指示器,并不能强制程序不能操作它,而是作为一个标志供程序间协调只用。即锁文件是建议锁,而不是强制锁。
3.创建全局锁文件可以使用open函数,带上O_CREAT|O_EXCL,确保文件创建时不存在并创建它,该操作是原子操作。程序使用锁文件的方式是,判断该文件是否创建,然后根据要求执行相应的代码,执行后close文件描述符并unlink该文件。
4.创建区域锁文件使用int fcntl(int fildes,int command,struct flock*flock),它对打开的文件描述fildes进行操作,通过command参数设置不同的任务。command命令有:F_GETLK/F_SETLK/F_SETLKW,flock结构包括ltype(F_RDLCK共享锁、读锁,F_UNLCK解锁,F_WRLCK独占锁、写锁),l_whence、l_start和l_len指定文件的区域,l_pid指定锁被那个pid拥有。
F_GETLK用于获取fildes文件描述符关联文件的锁信息,并不创建锁。
F_SETLK用于加锁或者解锁,锁类型通过flock结构指定。
F_SETLK作用跟F_SETLK相同,但是如果获取不到锁就在等待而不是返回-1。
加锁之后必须使用系统调用read、write进行读写,不能使用带缓存的fread、fwrite。




chap 8 
mysql...




chap 9
1.makefile由依赖关系和规则组成。依赖关系有目标和需要的源文件构成,规则用于描述如何通过源文件创建目标。make程序会扫描makefile中依赖文件,根据文件的时间决定是否再次进行编译。
2.make的参数:-k遇到错误,依然运行;-n输出执行步骤;-f filename执行make读取的文件,默认为Makefile。
3.依赖关系:
----------------------------------------------
myapp: main.o 2.o 3.o
main.o: main.c a.h
2.o: 2.c a.h b.h
3.o: 3.c b.h c.h
----------------------------------------------
4.规则(必须使用TAB):
----------------------------------------------
myapp: main.o 2.o 3.o
[TAB]gcc -o myapp main.o 2.o 3.o
----------------------------------------------
5.makefile中使用注释#,定义宏MACRONAME=value,引用宏${MACRONAME},指定编译器CC=gcc


chap 10
gdb...
0 0