分享
 
 
 

linux的c编程技巧

王朝system·作者佚名  2008-05-18
窄屏简体版  字體: |||超大  

1. 获取文件的信息:

stat(char* filename, struct stat* buf);

struct stat {

dev_t st_dev; /* 设备 */

ino_t st_ino; /* 节点 */

mode_t st_mode; /* 模式 */

nlink_t st_nlink; /* 硬连接 */

uid_t st_uid; /* 用户ID */

gid_t st_gid; /* 组ID */

dev_t st_rdev; /* 设备类型 */

off_t st_off; /* 文件字节数 */

unsigned long st_blksize; /* 块大小 */

unsigned long st_blocks; /* 块数 */

time_t st_atime; /* 最后一次访问时间 */

time_t st_mtime; /* 最后一次修改时间 */

time_t st_ctime; /* 最后一次改变时间(指属性) */

};

struct statfs

{

long f_type; /* 文件系统类型 */

long f_bsize; /* 块大小*/

long f_blocks; /* 块多少*/

long f_bfree; /* 空闲的块()*/

long f_bavail; /* 可用块 */

long f_files; /* 总文件节点 */

long f_ffree; /* 空闲文件节点 */

fsid_t f_fsid; /* 文件系统id */

long f_namelen; /* 文件名的最大长度 */

long f_spare[6]; /* spare for later */

};

2. 获取文件访问权限或者判断文件是否存在:

int access(char* filename, int mode);

3. 获取当前时间:

time_t t;char* asctime(localtime(&t));

或者

time(&t);char* ctime(&t);

得到的字符串形式为:Wed Mar 12 10:07:53 2003

4. 计算两个时刻之间的时间差

double difftime(time_t time2, time_t time1);

5. 删除某文件:

int unlink(char* pathname);

int remove(char* pathname);

6. 删除某目录:

int rmdir(const char* pathname);

7. 获得当前所在目录名:

char * getcwd(char *buf,size_t size); buf将会返回目前路径名称。

8. 获取目录信息:

DIR * opendir(const char * pathname);

int closedir(DIR *dir);

struct dirent * readdir(DIR *dir);

struct dirent

{

long d_ino; /* inode number */

off_t d_off; /* offset to this dirent */

unsigned short d_reclen; /* length of this d_name */

char d_name [NAME_MAX+1]; /* file name (null-terminated) */

};

9. strerror(errno);函数会返回一个指定的错误号的错误信息的字符串.

10.得到当前路径下面所有的文件(包含目录)的个数

struct dirent **namelist;

int num = scandir(".",&namelist,0,alphasort)

11./etc/ld.so.conf:包含共享库的搜索位置

查看执行文件调用了哪些共享库

shell>ldd a.out

共享库管理工具,一般在更新了共享库之后要运行该命令

shell>ldconfig

12.查看文件执行的速度

shell>time ./a.out

13.改变文件访问权限

int chmod(const char* path, mode_t mode);

14.改变文件大小

int chsize(int handle, long size);

15.把一个浮点数转换为字符串

char ecvt(double value, int ndigit, int *decpt, int *sign);

16.检测文件结束

int eof(int *handle);

17.检测流上的文件结束符

int feof(FILE *stream);

18.检测流上的错误

int ferror(FILE *stream);

19.装入并运行其它程序的函数

int execl(char *pathname, char *arg0, arg1, ..., argn, NULL);

int execle(char *pathname, char *arg0, arg1, ..., argn, NULL,

char *envp[]);

int execlp(char *pathname, char *arg0, arg1, .., NULL);

int execple(char *pathname, char *arg0, arg1, ..., NULL,

char *envp[]);

int execv(char *pathname, char *argv[]);

int execve(char *pathname, char *argv[], char *envp[]);

int execvp(char *pathname, char *argv[]);

int execvpe(char *pathname, char *argv[], char *envp[]);

20.指数函数

double exp(double x);

21. struct sockaddr

{

unsigned short sa_family; /* address family, AF_xxx */

char sa_data[14]; /* 14 bytes of protocol address */

};

struct sockaddr_in

{

short int sin_family; /* Address family */

unsigned short int sin_port; /* Port number */

struct in_addr sin_addr; /* Internet address */

unsigned char sin_zero[8]; /* Same size as struct sockaddr */

};

struct in_addr

{

unsigned long s_addr;

};

s_addr按照网络字节顺序存储IP地址

sin_zero是为了让sockaddr与sockaddr_in两个数据结构保持大小相同而保留的空字节。

使用的例子:

struct sockaddr_in sa;

sa.sin_family = AF_INET;

sa.sin_port = htons(3490);

sa.sin_addr.s_addr = inet_addr("132.241.5.10");

bzero(&(sa.sin_zero), 8);

注意:如果sa.sin_addr.s_addr = INADDR_ANY,则不指定IP地址(用于Server程序)

22. #define UNIX_PATH_MAX 108

struct sockaddr_un

{

sa_family_t sun_family; /* AF_UNIX */

char sun_path[UNIX_PATH_MAX]; /* 路径名 */

};

23. IP地址转换函数:

unsigned long inet_addr (const char *cp);

inet_addr将一个点分十进制IP地址字符串转换成32位数字表示的IP地址(网络字节顺序)

char* inet_ntoa (struct in_addr in);

inet_ntoa将一个32位数字表示的IP地址转换成点分十进制IP地址字符串。

这两个函数互为反函数

字节顺序转换:

htons()--"Host to Network Short"

htonl()--"Host to Network Long"

ntohs()--"Network to Host Short"

ntohl()--"Network to Host Long"

24. 获取当前机器的CPU、内存使用情况

getrusage

25. open的使用中常用的flag和mode参数

intFILE_FLAG = O_WRONLY|O_APPEND|O_CREAT;

intFILE_MODE = S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH;

26. makefile中常用的符号:

预定义变量 含义

$* 不包含扩展名的目标文件名称。

$@ 目标的完整名称

$% 如果目标是归档成员,则该变量表示目标的归档成员名称。例如,如果目标名称

为 mytarget.so(image.o),则 $@ 为 mytarget.so,而 $% 为 image.o。

$+ 所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件。

$< 第一个依赖文件的名称。

$? 所有的依赖文件,以空格分开,这些依赖文件的修改日期比目标的创建日期晚

$^ 所有的依赖文件,以空格分开,不包含重复的依赖文件。

AR 归档维护程序的名称,默认值为 ar。

ARFLAGS 归档维护程序的选项。

AS 汇编程序的名称,默认值为 as。

ASFLAGS 汇编程序的选项。

CC C 编译器的名称,默认值为 cc。

CCFLAGS C 编译器的选项。

CPP C 预编译器的名称,默认值为 $(CC) -E。

CPPFLAGS C 预编译的选项。

CXX C++ 编译器的名称,默认值为 g++。

CXXFLAGS C++ 编译器的选项。

FC FORTRAN 编译器的名称,默认值为 f77。

FFLAGS FORTRAN 编译器的选项。

用变量object表示所有的.o文件:

objects := $(wildcard *.o)

make -n或者--just-print表示只是显示命令,但不会执行命令

make -s或者--slient表示全面禁止命令的显示

make -i或者--ignore-errors表示Makefile中所有命令都会忽略错误

make -k或者--keep-going表示如果某规则中的命令出错了,那么就终止该规则的执行,但继续执行其它规则

在makefile中直接利用shell获取变量PLAT

使用make中的一种用变量来定义变量的方法。这种方法使用的是“:=”操作符

PLAT := $(shell uname -a)

我们要定义一个变量,其值是一个空格,那么我们可以这样来:

nullstring :=

space := $(nullstring) # end of the line

FOO ?= bar含义是:

如果FOO没有被定义过,那么变量FOO的值就是“bar”,如果FOO先前被定义过,那么这条语将什么也不做,其等价于:

ifeq ($(origin FOO), undefined)

FOO = bar

endif

foo := a.o b.o c.o

bar := $(foo:.o=.c)

我们先定义了一个“$(foo)”变量,而第二行的意思是把“$(foo)”中所有以“.o”字串“结尾”全部替换成“.c”,所以我们的“$(bar)”的值就是“a.c b.c c.c”。

你想在Makefile中设置参数值,你可以使用“override”指示符。其语法是:

override <variable> = <value>

override <variable> := <value>

当然,你还可以追加:

override <variable> += <more text>

make运行时的系统环境变量可以在make开始运行时被载入到Makefile文件中,

但是如果Makefile中已定义了这个变量,或是这个变量由make命令行带入,

那么系统的环境变量的值将被覆盖。

如果make指定了“-e”参数,那么,系统环境变量将覆盖Makefile中定义的变量

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有