fwrite
fopen打开文件。
fwrite循环写,系统为了减少访问磁盘的次数,会在数据满足一定的长度或者刷新输出缓冲区才会写到磁盘中。
fclose关闭文件时,系统刷新相关的流,所以别忘了调用。在程序结束的时候,也会关闭进程相关的文件描述符。
在某次使用中,在写文件的函数退出的时候,并没有按照预想的生成文件,在程序结束的时候才生成,使用gdb调试,发现程序在main退出的时候一瞬间生成了文件。
在linux中每个进程会维护一个描述符表,会有所有进程都共享的文件表和v-node表。在描述符表中维护着进程打开的所有“文件”,在文件表中存放着文件位置、文件引用计数、指向v-node表中相关项的项,在v-node标准存放着相关文件的具体信息。在进程关掉相应文件时,文件表中的引用计数会减1。
‘\0’
在C语言中,字符串的结尾都会带一个’\0’,以标志字符串的结束。
在shell脚本中的字符串也不例外,echo -n “str”可以去掉。在某次使用md5sum的时候,算出的值总是不对,原因便在这里。
返回值
我们知道在C程序中,是不能返回一个临时变量的指针的,因为在函数退出的时候,相应的栈将被释放,那么存在其中的数据将不能再被访问。但是我们可以返回值,除了这一点之外,还可以返回存储在堆,全局变量区中的变量的指针。还有一点,可以返回函数的指针,在当前函数中有一个临时函数指针,可以将某个函数的指针赋值给它,并将其返回。
赋值
C语言允许结构跨等号赋值。
数组a=b,这样的形式不允许。但是可以struct xx{arrary a},这样就可以使用结构体的对象相互赋值了。