(四) UNIX环境
来源:互联网 发布:百度竞价推广优化 编辑:程序博客网 时间:2024/06/06 00:01
- 环境变量的用途
环境变量时一个双刃剑,与命令行相比,他们更隐蔽
环境变量有点象全局变量,他们能够改变程序的行为,引起不可预料的结果
- UNIX系统时间
格林威治时间1970年1月1日午夜
- 日期格式转换控制符
%a星期几的简写形式%A星期几的全称%b月份的简写形式%B月份的全称%c日期和时间%d月份中的日期,0-31%H小时,0-23%I12进制小时钟点,01-12%j年份中的日期,001-366%m年份中的月份,01-12%M分,00-59%P上午或下午%s秒,00-61%u星期几,1-7(1代表星期一)%U一年中第几个星期,01-53(星期天是一周的第一天)%V一年中第几个星期,01-53(星期一是一周的第一天)%w星期几,0-6(0代表星期天)%x当地格式的日期%X当地格式的时间%y年份中的最后两位数,00-99%Y年%Z地理时区名称%%一个"%"字符
- strftime函数
#include <time.h>#include <stdio.h>int main(){time_t the_time;struct tm *tm_ptr;char buf[256] = {0};(void)time(&the_time);tm_ptr = localtime(&the_time);strftime(buf, 256, "%A %d %B,%I:%S,%P", tm_ptr);printf("strftime gives: %s\n", buf);return 0;}输出:
strftime gives: Thursday 25 September,12:11,pm
- 临时文件
#include <stdio.h>int main(){char tmpname[L_tmpnam];char * filename;filename = tmpnam(tmpname);printf("temporary file name is %s\n", filename);filename = mkstemp(tmpname); //原始 mktempprintf("temporary file name is %s\n", filename);return 0;}返回一个合法的文件名,它与任何现有的文件名都不一样
如果遇到需要立刻用到临时文件,可以用
当该文件上的引用线索都被关闭时,它就会被自动删除
如果我们打算用它,就必须尽快打开这个文件,把另一个程序打开一个同名文件的风险降到最小(所以用到tmpfile)
- 用户的个人资料
一般情况,用户的UID都大于100
uid_t getuid(void);函数返回与程序关联的UID,它通常是启动该程序的用户UIDchar *getlogin(void);函数返回与当前用户关联着的登录名系统文件/etc/passwd里包含着一个与用户账户有关的数据库
里面的账户包括用户名,加密口令字,用户身份标示符(UID),分组标示符(GID),用户的全名,登录子目录以及省略shell
...
- 与用户资料有关的其他函数
uid_t geteuid(void);gid_t getgid(void);gid_t getegid(void);int setuid(uid_t uid);int setgid(gid_t gid);
- 主机资料
int gethostname(char *name, size_t len);int uname(struct utsname *name);
- 日志记录功能
#include <stdio.h>#include <syslog.h>int main(){FILE *f = NULL;f = fopen("hello" ,"r");syslog(LOG_ERR | LOG_USER, "oops - %m\n");return 0;}/var/log/messages 会记录日志
Sep 26 15:29:48 localhost a.out: oops - No such file or directory
- 资源和限制
getrusage函数的作用是把CPU时间信息写到由参数r_usage指向的rusage结构里去
int getrusage(int who, struct rusage *usage);who参数 RUSAGE_SELF只返回当前程序的CPU时间占用信息RUSAGE_CHILDREN还包括子进程的CPU时间占用信息
#include <stdio.h>#include <sys/time.h>#include <sys/resource.h>int main(){struct rusage r_usage;getrusage(RUSAGE_SELF, &r_usage);printf("CPU usage: User = %ld.%06ld, System = %ld.%06ld\n",r_usage.ru_utime.tv_sec, r_usage.ru_utime.tv_usec,r_usage.ru_stime.tv_sec, r_usage.ru_stime.tv_usec);return 0;}CPU usage: User = 0.000000, System = 0.000999每一个运行中的程序都有一个关联着的优先级,优先级比较高的程序分配到CPU时间会多一点普通用户只能降低自己程序的优先级,不能增加他们
- 优先级
应用程序可以通过getpriority和setpriority函数确定和改变(或其他程序)的优先级
缺省优先级是0.正优先级用于后台任务,他们只有在没有更高优先级的任务准备运行时才会运行
负优先级会使程序运行的更频繁,从CPU的可用时间分出更大的一块
合法优先级范围是-20到+20
#include <stdio.h>#include <sys/time.h>#include <sys/resource.h>int main(){int priority;priority = getpriority(PRIO_PROCESS, getpid());printf("Current priority = %d\n", priority);return 0;}
- 资源和限制
getrusage函数的作用是把CPU时间信息写到由参数r_usage指向的rusage结构里去
int getrusage(int who, struct rusage *usage);who参数 RUSAGE_SELF只返回当前程序的CPU时间占用信息RUSAGE_CHILDREN还包括子进程的CPU时间占用信息
#include <stdio.h>#include <sys/time.h>#include <sys/resource.h>int main(){struct rusage r_usage;getrusage(RUSAGE_SELF, &r_usage);printf("CPU usage: User = %ld.%06ld, System = %ld.%06ld\n",r_usage.ru_utime.tv_sec, r_usage.ru_utime.tv_usec,r_usage.ru_stime.tv_sec, r_usage.ru_stime.tv_usec);return 0;}CPU usage: User = 0.000000, System = 0.000999每一个运行中的程序都有一个关联着的优先级,优先级比较高的程序分配到CPU时间会多一点普通用户只能降低自己程序的优先级,不能增加他们
- 优先级
应用程序可以通过getpriority和setpriority函数确定和改变(或其他程序)的优先级
缺省优先级是0.正优先级用于后台任务,他们只有在没有更高优先级的任务准备运行时才会运行
负优先级会使程序运行的更频繁,从CPU的可用时间分出更大的一块
合法优先级范围是-20到+20
#include <stdio.h>#include <sys/time.h>#include <sys/resource.h>int main(){int priority;priority = getpriority(PRIO_PROCESS, getpid());printf("Current priority = %d\n", priority);return 0;}
0 0
- (四) UNIX环境
- 《Unix环境高级编程》 总结 (四)
- UNIX编程环境(The UNIX Programming Environment) 备忘录(四)
- Unix环境高级编程学习笔记(四) 进程环境
- UNIX环境高级编程读书笔记(四)—出错处理
- 小佳弱弱学习——unix环境高级编程(四)
- UNIX环境高级编程读书笔记(四)—出错处理
- UNIX环境高级编程--第三-四章总结
- UNIX环境高级编程(四)文件和目录
- UNIX 环境高级编程(四)—— dirent.h
- 《UNIX环境高级编程》四文件和目录读书笔记
- UNIX高级环境编程学习(四)---------------------基础知识
- UNIX环境高级编程-读书笔记-网络编程(四)
- unix环境
- UNIX环境
- UNIX环境高级编程之学习笔记(四)-文件和目录(1)
- UNIX环境高级编程之学习笔记(四)-文件和目录(2)
- UNIX环境高级编程学习笔记(四)不调用fcntl函数实现dup2的功能
- eclipse中禁用JS验证
- 百度云推送Demo出现enter bind token null
- 924
- qt中采用窄带speex进行网络语音通话实验程序
- java Web访问数据库
- (四) UNIX环境
- NYOJ 1075 (递推 + 矩阵快速幂)
- 十三 Windows内存体系结构
- IOS-plist文件DES加密
- 日期处理
- oracle中常用函数大全
- 如何获得Hibernate的数据库底层异常
- Thermal计算方式小结
- 一段代码教你看懂Hibernate一级缓存与懒加载