参考:《Linux C编程从基础到实践》
##################################
main函数解析
Linux下main函数的标准调用格式如下:
int main(int argc, char *argv[])参数argc必须是整型变量,其是命令行参数的数目;argv必须是指向字符串的指针数组,这些指针分别指向各个命令行参数
Linux命令行的一般形式为:
可执行文件名 参数 参数 ...
note:如果不需要传递参数,可以省略main函数的参数,直接写为int main(void)
此外,main函数也带有返回值,默认的返回值类型为int,在一般的程序中,main函数的返回值类型int可以省略不写,返回值会直接传递给Linux内核,如果main函数的最后没有写return语句的话,gcc会自动在生成的目标文件中加入"return 0;",表示程序正常退出,main函数的返回值可以将执行的相应结果反馈给内核
应用实例 - main.c:
#include <stdio.h> int main(int argc, char *argv[]) { //第一个存放参数的个数,第二个缓冲区存放参数 int i=0; printf("%d\n", argc); for (i=0; i<argc; i++) { printf("%s\n", argv[i]); } }
gcc -o main main.c
给main函数的参数字符串是"this is a test!",这个参数字符串包括了4个字符串,然后算上可执行文件本身的字符串,所以argc的数目是5。
#################################################3
时间函数
头文件为:
#include <time.h>
int gettimeofday(struct timeval *tv, struct timezone *tz);gettimeofday获取当前时间和时区信息,需要超级用户的权限,tv参数用于指向存放返回时间信息的缓冲区:
struct timeval { time_t tv_sec; //秒 suseconds_t tv_usec;//微妙 };
struct timezone { int tz_minuteswest; //minutes west of Greenwich int tz_dsttime; //type of DST correction }
首先调用gettimeofday函数获得当前的时间信息,然后将这些时间信息分门别类地输出,最后测试本身的执行时间:
//获取秒和微妙时间,现实和Greenwich的时间差,并且测试运行这段程序所需要的时间 #include <sys/time.h> #include <unistd.h> #include <stdio.h> int main(void) { struct timeval start, end; struct timezone timez; gettimeofday(&start, &timez); //获取当前时间 printf("tv_sec: %d\n", start.tv_sec); //输出秒 printf("tv_usec: %d\n", start.tv_usec); //输出毫秒 printf("tz_minuteswest: %d\n", timez.tz_minuteswest); printf("tv_dsttime: %d\n", timez.tz_dsttime); gettimeofday(&end, &timez); printf("end_usec-start_usec: %d\n", (end.tv_usec-start.tv_usec)); //计算程序执行的时间 return 0; }
gcc -o time time.c
C语言代码的分配机制
Linux操作系统提供了三个用于存储空间动态分配的函数和一个用于释放内存空间的函数:
malloc:给进程分配指定字节数的存储区,此存储中的初始值不为0
calloc:为指定流数量具有指定长度的对象分配存储空间,该空间中每一位都被初始化为0
realloc:更改以前分配区的长度(可以增加,也可以减少),当为增加长度时,可能需要将以前分配区间的内容迁移到另外一个足够大的区域,在尾部提供增加的存储区,而新增加的区间内的初始化值不确定。
free:用于释放其参数指针指向的存储空间,这些空间会被送入系统的可用存储区池,可以被以上三个函数再次分配。
头文件:
#include <stdlib.h>
void *malloc(size_t size); void *calloc(size_t nobj, size_t size); void *realloc(void *ptr, size_t newsize); void free(void *ptr);