当前位置: 首页 > news >正文

双语网站代码外贸网站建设制作

双语网站代码,外贸网站建设制作,莆田网站格在哪里做,wordpress注册设置密码目录 环境变量main参数 --- 命令行参数环境变量环境变量特性 --- 命令行操作main函数的参数获取环境变量environ获取环境变量getenv()获取环境变量unset移除本地变量或环境变量set显示本地变量 代码获取和设置环境变量 本地变量 程序地址空间什么是进程地址空间为什么有地址空间… 目录 环境变量main参数 --- 命令行参数环境变量环境变量特性 --- 命令行操作main函数的参数获取环境变量environ获取环境变量getenv()获取环境变量unset移除本地变量或环境变量set显示本地变量 代码获取和设置环境变量 本地变量 程序地址空间什么是进程地址空间为什么有地址空间页表内存申请 环境变量 是什么环境变量是由系统提供的一组全局变量每一个环境变量都有其不同的系统级用途。 为什么有在不同的场景下在执行某些任务或工作时是需要知道更多的其他属性。eg:创建文件时它就知道你是谁给你一定的权限。 每个用户都有属于自己的.bash_profle main参数 — 命令行参数 main函数可以带参数int argc 和 char * argv[] char*数组argv指向一个一个的字符串 argc是指针数组里面元素个数 #includestdio.hint main(int argc, char* argv[]) {for(int i 0; i argc; i){printf(argv[%d]: %s\n, i, argv[i]);}return 0; }argv必须以NULL结尾 为何这么做 可以通过不同的选项对于同一个程序可以使用内部不同的子功能 就像 ls -l ls -a ls -n 使用参数写一个计算器 #includestdio.h #includestdlib.h #includestring.h //./myprocess -[add|sub|mul|div] int main(int argc, char* argv[]) {if(argc ! 4){printf(./myprocess -{add|sub|mul|div} x y\n);return 1;}int x atoi(argv[2]);int y atoi(argv[3]);if(strcmp(-add, argv[1]) 0){printf(%d %d %d\n, x, y, xy);}else if(strcmp(-sub, argv[1]) 0){printf(%d - %d %d\n, x, y, x-y);}else if(strcmp(-mul, argv[1]) 0){printf(%d * %d %d\n, x, y, x*y);}else{printf(%d / %d %d\n, x, y, x/y);}return 0; }命令行参数是选项指令的基础 环境变量 不是一个而是一堆彼此之间没有关系 是系统内置的具有特殊用途的变量 定义变量的本质其实是开辟空间 操作系统/bash是C语言写的程序他也能在运行中开辟空间 系统的环境变量本质就是系统自己开辟的空间给他名字和内容即可 执行pwd命令实际上是读取环境变量PWD 想要自己写写的程序和操作系统自带的命令一样直接使用而不是./myprocess 需要将myprocess所在的路径加入到PATH 环境变量里面 环境变量特性 — 命令行操作 1、export 导入某个环境变量env里面就有了 2、env 3、echo main函数的参数获取环境变量 main函数除了有argc和argv两个参数以外还有一个参数env env是一个char*的数组用来存放父进程给的环境变量 上面就是自己打印的环境变量 int main(int argc, char* argv[], char* env[]) {printf(-----------\n);for(int i 0; env[i];i){printf(%s\n,env[i]);}return 0; }环境变量具有全局属性环境变量会被所有的子进程即孙子进程继承因此改变子进程的并不影响 environ获取环境变量 environ是一个二级指针 第一次用需要声明 getenv()获取环境变量 上面获取环境变量的方式太笼统可以使用getenv 环境变量可以使用USER限制谁可以访问该程序 头文件#includestdlib.h int main(int argc, char* argv[], char* env[]) {const char* usernamegetenv(USER);if(strcmp(hui, username)0){printf(this is my process\n);}else{printf(你没有权限\n);}return 0 }unset移除本地变量或环境变量 unset 变量名set显示本地变量 环境变量是bash从磁盘里面读来的 代码获取和设置环境变量 想设置自己的环境变量在启动中就有可以配置家目录下的.bash_profile 关掉重启环境变量里面就有MYVAL 本地变量 本地变量不在环境变量中可以set将shell里面的全部变量显示出来(环境变量和本地变量) 本地变量只能在bash内部有效不能被子进程继承下去 myenv是导进去的环境变量可以被子进程继承而hello是本地变量不是环境变量不能被子进程继承 #includestdio.h #includeunistd.h #includestdlib.hint main() {const char* myenv getenv(myenv);if(myenv NULL) printf(getenv() get null\n);else printf(myenv: %s\n, myenv);return 0; }#includestdio.h #includeunistd.h #includestdlib.hint main() {//const char* myenv getenv(myenv);if(myenv NULL) printf(getenv() get null\n);else printf(myenv: %s\n, myenv);return 0; }程序地址空间 对于地址空间用代码的初步感受 堆栈相对而生 命令行参数和环境变量的严重现有命令行参数表再有环境变量这张表 argvi打印的是命令行参数那张表 argv[i]环境变量字符串的地址 无论是表还是表指向的项目都在栈上部 未初始化数据和以已初始化数据是全局变量 static变量是全局变量 #includestdio.h #includeunistd.h #includestdlib.h int g_unval; int g_val 100;int main(int argc, char* argv[], char* env[]) {printf(code addr:%p\n, main);printf(init data addr:%p\n, g_val);printf(uninit data addr:%p\n, g_unval);char* heap (char*)malloc(20);char* heap1 (char*)malloc(20);char* heap2 (char*)malloc(20);char* heap3 (char*)malloc(20);printf(heap addr:%p\n, heap);printf(heap1 addr:%p\n, heap1);printf(heap2 addr:%p\n, heap2);printf(heap3 addr:%p\n, heap3);static int i 99;printf(static data addr:%p\n,i);printf(stack addr:%p\n, heap);printf(stack1 addr:%p\n, heap1);printf(stack2 addr:%p\n, heap2);printf(stack3 addr:%p\n, heap3);for(int i 0; argv[i]; i){printf(argv[%d]:%p\n, i, argv[i]);//printf(argv[%d]:%p\n, i, argvi);}for(int i 0; env[i]; i){printf(env[%d]:%p\n, i, env[i]);//printf(env[%d]:%p\n, i, envi);}return 0; }问题 上面那张图是内存吗不是叫作进程地址空间 验证 #includestdio.h #includeunistd.h #includestdlib.h int g_unval; int g_val 100;int main() {pid_t id fork();if(id 0){//子进程int cnt 0;while(1){printf(child, pid:%d, ppid:%d, g_val:%d, g_val:%p\n,getpid(), getppid(), g_val, g_val);cnt;if(cnt 5){printf(child: g_val 100-200\n);g_val 200;}sleep(1);}}else{//父进程while(1){printf(father, pid:%d, ppid:%d, g_val:%d, g_val:%p\n,getpid(), getppid(), g_val, g_val);sleep(2);}}return 0; }这个地址绝对不是物理空间这个地址叫作虚拟地址/线性地址 语言中我们写代码所用到的所有地址都不是物理地址 打出来的值不一样是因为子进程的映射表已经改变映射到不一样的物理地址 什么是进程地址空间 每一个进程都存在一个进程地址空间32[0, 4GB] 地址空间是一个内核数据结构里面有各种类型的区域划分 地址空间不具备对代码和数据的保存能力在物理空间上存放 将地址空间上的地址(虚拟地址/线性)转换到物理空间中 给我们的进程提供一张映射表 — 页表 为什么有地址空间页表 1、将物理内存从无序变成有序让进程以统一的视角看待内存 2、将进程管理和内存管理进程解耦合 3、当访问内存的时候如果请求合法就会映射请求不合法就不会映射这就是地址空间和页表的作用 进程内核数据结构自己的代码和数据 内存申请 操作系统一定要为效率和资源使用率负责 1、申请的内存你会直接使用吗 不一定 2、申请内存本质是在哪里申请 本质申请是在进程地址空间中申请 new或malloc申请地址空间的时候只是在虚拟地址上申请的并没有在内存空间上申请。当第一次使用申请的空间的时候会去访问页表但页表里面找不到发生缺页中断再去物理内存上申请。 优点 充分保证内存的使用率不会空转 提升new或malloc的速度
http://www.hkea.cn/news/14364897/

相关文章:

  • 如何在图片上添加文字做网站深圳房管局官网查询系统
  • 做母婴网站赚钱创意餐厅网站建设文案书
  • 网页设计模板网站免费下载奉贤建设机械网站制作
  • 网站验证码怎么做平面广告设计好学吗
  • 淄博网站制作首选专家专业做w7系统的网站
  • 网站设计的任务网站建设流程及规范
  • 外包做网站平台 一分钟包装设计网站排行榜前十名
  • 专业做红木家具网站摄影手机网站模板
  • 温州市网站制作多少钱wordpress标签球形
  • 北京网站建设有哪些ps做网站原形
  • 嘉定网站建设电脑培训怎么建立网站数据库连接
  • 合肥网站建设 微笑互联网站群集约化建设通知
  • 国外购买空间的网站有哪些教育网站模板下载
  • 深圳网站建站建设公司地址互动科技 网站
  • 福州城市建设规划网站域名查询网站信息
  • 仿百度文库网站源码商业版dedecms(梦织)系统内核网站权重如何速度增加
  • 公司logo设计模板seo站内优化
  • 南京快速建站模板下载wordpress投稿者
  • 十大免费cms建站系统介绍公司汇报网站建设方案
  • 南昌建设医院网站恶意点击软件哪个好
  • 网站建设培训手册国外永久浏览器
  • 蓝色手机网站模板顺义哪里有做网站设计的
  • 网站绝对路径301php建立网站
  • 网站定制开发什么意思城乡和住房建设厅网站
  • 网站名称如何设置重庆市建设工程信息网打印
  • 国美在线网站域名建设wordpress仿百度文件
  • 免费代理做企业网站苏州网站建站
  • 张北网站建设设计公司属于什么行业类型
  • 网站建设推广工资温州app软件开发
  • 中国站长之家网站科技公司网站欣赏