之前看Linux C编程记得笔记,不全面也不系统,但亦可稍作参考

0.LinuxC编程,要首先考虑:硬件平台问题……

1.区别通配符和正则表达式

2.区别Shell:单引号、双引号、反引号

3?.Shell编程的语法……

4.char *str="Hello"char str[]="Hello"的区别

5.深入理解:传值调用和传址调用的区别

6.函数指针:区别int *fun()int (*fun)()

7.gcc

gcc的编译过程分为:预处理、编译、汇编、链接四个阶段

gcc -pedantic:严格要求符合ANSI标准

……

8.time命令用于测量指定程序的运行时间

9.C/C++的类型溢出问题、各种类型的精度

10.gdb(不要害怕工作量大,要细心跟踪程度每一步运行、每一个变量):

gdbbacktraceframe n命令

gdb的跟踪变量的值的操作,printdisplay

gdb的断点调试,break的多种用法

……

11.函数、C代码的内存地址?

12.makeMakefile来管理多代码文件工程项目

?Makefile的语法

13.openflagsmode的取值?

14.gets函数的缺陷和漏洞:缓存区越界,尽量少用getsputs,推荐fgetsfputs,后者更安全

15.fclose

fclose(fp);执行之后再重复执行,就会出错

fopen失败的FILE *,进行fclose()是会发生段错误的

16.可读、可写、可执行的真实含义

17.哪些是Linux的系统调用?哪些是C的库函数

18.fork

一个fork在父进程和它创建的子进程都有返回值,父进程返回子进程的pid,子进程返回0

子进程是父进程的一个拷贝,即子进程从父进程得到了数据段和堆栈段的拷贝,这些需要分配新的内存,也就是fork之后父子进程各有自己的数据段和堆栈段,而对于只读的代码段,通常使用共享内存的方式访问

fork返回后,子进程和父进程都从调用fork函数的下一条语句开始执行到最后

fork之后,父子进程的执行顺序由内核来调度,所以是不确定的

19.vfork

父进程返回子进程的pid,子进程返回0

区别于fork

vfork创建的子进程与父进程之间共享数据段

vfork创建的子进程先运行,父进程挂起,直到子进程调用execexit之后,父子进程的执行次序才不再有限制

20.理解C的数据段、堆栈段、代码段

21.exit(1)在循环中的话,它也是直接整个结束程序,而不是跳出循环,和break不同

22.exec函数族用来执行新的进程,以新的进程来完全代替原有的进程

?怎么和forkvfork一起使用

23.系统内核调度进程,没有固定的顺序,是按照随机的顺序来执行的,所以在一个程序中创建多个子进程后,子进程并不会按照代码中创建子进程的顺序来执行,是随机的顺序

24.waitwaitpid。在多进程处理时,用户可能需要用到有关进程等待的操作,这种操作可以是进程组成员之间的等待,也可以是父进程对子进程的等待

一个进程调用了exit之后,该进程并非马上消失掉,而是留下一个称为僵尸进程的数据结构。这时的处理方法之一就是使用进程等待的系统调用waitwaitpid

25.pid_t wait(int *status)

进程一旦调用wait,就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出,如果让它找到这样的一个已经变成僵尸的子进程,wait就收集这个子进程的信息,并把它彻底销毁后返回,否则wait就一直阻塞在那里,直到有一个出现为止

参数是用来保存被收集的进程退出时候的一些状态,它是一个指向int型的指针。但如果程序员对这个子进程是如何死掉的毫不在意,而只是想把这个僵尸进程消除掉,可用这种格式wait(NULL),参数设为NULL

如果成功,wait会返回被收集的子进程的进程ID,如果调用进程没有子进程,调用就会失败,此时wait返回-1,同时errno被置为ECHILD

26.pid_t waitpid(pid_t pid, int *status, int options),从本质上讲,waitpid和和wait作用完全相同,但是waitpid多出了两个可由用户控制的参数pidoptions,从而为用户编程提供了一种更为灵活的方式。waitpid可以用来等待指定的进程,可以使进程不挂起而立刻返回。参数pid用于指定所等待的进程:

pid>0,只等待IDpid的子进程,不管其他已经有多少子进程结束退出了,只要指定的子进程还没有结束,waitpid就一直等待下去。

pid=-1,等待任何一个子进程退出,没有任何限制,此时waitpid等价于wait

pid=0,等待同一进程组中的任何子进程,如果某一子进程已经加入别的进程组,waitpid则不会对它做任何理睬

pid<-1,等待一个指定进程组中的任何子进程,这个进程组的ID等于pid的绝对值

27.如果正在运行的程序源代码里注册了针对某一特定信号的处理函数,不论当时程序执行到什么地方,一旦进程接收到该信号,相应的调用就会发生

28.什么是进程组

29.时间函数

30.0x开头是16进制数,0开头是8进制数

31.编译gtk+开发的程序时,需要在gcc命令后加上`pkg-config --libs --cflags gtk+-2.0`,如:gcc -g -o window window.c `pkg-config --libs --cflags gtk+-2.0`

31.读源码,要从主函数开始读起,遇到调用的函数再去读对应函数的源码……

32!.在C中,编写函数的额一个好的技巧,函数返回值只是返回函数执行成功与否,而通过地址传参方式去操作实参,并更改实参的值

在设计和使用函数和宏的时候,小心函数和宏是不是有副作用

33!.多个指针指向同一块地址,防止通过一个指针释放空间后,再通过另外的指针访问该空间,可能在不知情的情况下因此出一些错误

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。