Linux系统编程之我的学习笔记1_linux函数学习心得
gcc(g++)的工作流程: 1 预处理:调用cpp的预处理器,do的工作是:去掉注释,展开头文件,宏替换 gcc -E test.c -o test.i 2 编译:gcc将源代码文件编译为汇编语言代码 gcc -S test.i -o test.s 3 汇编:as,将汇编语言代码编译为了二进制文件(目标代码) gcc -c test.s -o test.o 4 链接:ld,链接test.c代码中所调用到的库函数 gcc -o test.o test
//要是想一步到位,do上面四步的工作的话,就用: gcc test.cpp(源文件名)/.c -o test(可执行文件名) CPP中,库一般都是一些功能相近或者相似的函数和类的集合体 库 分为静态库(static libary) 和 动态(共享)库(shared libary) //linux下,静态库文件用.a 作为后缀名;动态库文件用.so 作为后缀名 //windows下,静态库文件用.lib 作为后缀名,动态库文件用.dll 作为后缀名
(相关资料图)
一份库 制作完成后,如何给用户使用呢? //1-头文件:包含了库函数和类的声明 //2-库文件:包含了库函数和类的代码实现 //注意:库不能单独使用,只能作为其他执行程序的一部分来完成某些功能 //也就是说只能被其他程序调用类才能够使用!!! //你一个公司自己写的库源代码肯定不能给别人!肯定是给一个头文件和加密了的库文件卖给别人去用而已!
静态库(static library) 静态库可以认为是一些目标代码的集合,是在可执行程序运行前就已经加入到执行代码中的了, 已经成为可执行程序的一部分了(因此,如果生成了可执行程序后,你再删除静态库也不会对可执行程序产生任何的影响!) 按照习惯,linux下的静态库一般都是以.a作为文件的后缀名的 静态库的命名一般分为3个部分: 1-前缀:lib 2-库名称:自定义即可,如test 3-后缀:.a 所有最终的静态库名称为:libtest.a
静态库文件的找不到
CC是选定编译器的意思(linux下,C语言程序用gcc,C++语言程序用g++)
CPPFLAGS是选定你的.c/.cpp源代码在do预处理时,进而do展开呢?
CFLAGS是编译时选定,是否需要添加额外的选项(-Wall会输出warning警告信息,-
g使得你的程序可使用gdb调试,-c目前还不清楚可以干嘛~)
LDFLAGS是do链接时,指定你的静态库/动态库的路径以及名字的!(-L+绝对路径/相对路径 来指定库所在的路径!-I+库真正地名字,掐头lib去尾.a/.so就是库真正地名字了)
test:(makefile的
其中,$< 表示的是规则中的第一个条件,也即依赖项条件的第一个的意思!比如:
test:(makefile的
一般来说,在linux下,大多数的系统函数程序运行成功后,都会返回0!
对于链接文件而言,不论是软连接softlink还是硬链接hardlink,用stat函数最后都会显示出其所链接到的真正的文件之属性!
改进test_codes:
//stat函数测试:获取文件的类型和权限#include#include#include#include//include 各种类型声明 比如size_t#include//这是linux下特有的头文件!#include#includeint main(int argc,char* argv[]){ //int stat(const char *pathname, struct stat *statbuf); //获取文件的属性 struct stat st; stat(argv[1],&st); //获取文件类型 if((st.st_mode & S_IFMT) == S_IFREG) { printf("普通文件\n"); } else if((st.st_mode & S_IFMT) == S_IFDIR) { printf("目录文件\n"); } else if((st.st_mode & S_IFMT) == S_IFLNK) { printf("链接文件\n"); } if(S_ISREG(st.st_mode)) { printf("普通文件\n"); } else if(S_ISDIR(st.st_mode)) { printf("目录文件\n"); } else if(S_ISLNK(st.st_mode)) { printf("链接文件\n"); } //判断文件权限 //因为 权限 是可以有多个的,因此不能用if-else语句来判断,而是挨个if语句来判断! if(st.st_mode & S_IROTH) { printf("---R---"); } if(st.st_mode & S_IWOTH) { printf("---W---"); } if(st.st_mode & S_IXOTH) { printf("---x---"); } printf("\n"); return 0;}
stat函数
1 对于
,其实很容易理解,
就比如:命令ls -ltr > test.log2,会将ls显示的内容都“输出”到test.log2文件中去,其实就是把ls -ltr命令显示到终端的内容全都定向地输入到test.log2文件中去而已!
(这个命令中,>这个大于号就是重定向的操作符!)
>>符号,可以把字符串。那么此时,再用标准输出函数printf输出内容的话,就不会再向屏幕设备文件输出了,就会自动地把printf的内容输出(打印给)到fd所指向的文件test.log中了!此时就完成了dup2函数的重定向工作!
最后,再介绍一个IO函数,那么linux的IO系统函数就讲完啦!~
fcntl函数:(功能非常之强大!)
从定义式:int fcntl(int fd,int cmd,.../*arg*/);
就可以看出来:这里的...表明这个fcntl函数是一个:这里使用make + 对应源文件名(除去后缀.c/.cpp的名字),就可以对应快速编译某个源文件了!而不用每一次都 gcc/g++ XXX.c/.cpp -o XXX 敲多这么多代码了!
:
dup和dup2函数: 复制文件描述符----详情看图(我的截图,红色笔记)fcntl(fcontrol)函数: 1 复制文件描述符:int fd = fcntl(oldfd,F_DUPFD,0); 2 获得和设置文件的flag属性: int flag = fcntl(fd,F_GETFL,0); flag = flag | O_APPEND;//flag |= O_APPEND; fcntl(fd,F_SETFL,flag); int flag = fcntl(fd,F_GETFL,0); flag = flag | O_NONBLOCK;//flag |= O_NONBLOCK; fcntl(fd,F_SETFL,flag);注:这些都是固定的写法了,如果不会,直接去linux的终端输入命令man func or man 2 func 查即可!就算在工作中,也不一定说所有的系统函数你都得记住,但最起码你知道怎么去查找!怎么去查如何使用这些函数!知道怎么去查才是王道!
下面学习,
目录操作相关的函数:
test_codes:
//测试目录相关的函数 opendir readdir closedir#include#include#include#include#include#include#includeint checkdir(char* path);int main(int argc,char* argv[]){int n = checkdir(argv[1]);//传递一个路径给main函数!printf("n==[%d]\n",n);}int checkdir(char* path){//打开一个目录//DIR* opendir(const char* name));DIR * pDir = opendir(path);if(pDir == NULL){perror("opendir error!");return -1;}//循环读取目录项//struct dirent* readdir(DIR* dirp);int n = 0;char sFullPath[1024];struct dirent* p = NULL;while((p=readdir(pDir)) != NULL){//过滤掉.和..文件if(strcmp(p->d_name,".") == 0 || strcmp(p->d_name,"..") == 0)continue;printf("文件名:[%s/%s]--->",path,p->d_name);//判断文件所什么类型switch(p->d_type){case DT_DIR:printf("目录文件\n");memset(sFullPath,0x00,sizeof(sFullPath));sprintf(sFullPath,"%s/%s",path,p->d_name);n += checkdir(sFullPath);//自己调用自己!break;case DT_REG:printf("普通文件\n");n++;break;case DT_LNK:printf("链接文件\n");break;}}//关闭目录closedir(pDir);//只要你打开一个目录,就必须要关闭一个目录!这是必须要写的!return n;}
result:
接下来,我们将学习:
了解进程相关的概念
掌握时时,可以共享同一全局变量!此时不论是父还是子进程,它们读取g_var时,都是拿的同一块物理内存上的值!
简记为:对于同一全局变量,父子进程,写时复制(copy这个全局变量),读时共享(这个全局变量)。
test codes:
//fork函数测试代码,测试父子进程是否共享同一个全局变量#include#include#include#include#include//定义一个 全局变量int global_var = 99;int main(){//创建子进程函数原型://pid_t fork(void);pid_t pid = fork();if(pid < 0)//fork失败的case{perror("fork error!");return -1;}else if(pid == 0)//pid == 0 时,则当前进程为子进程{ sleep(1);//为了避免父进程还没执行呢,子进程就执行完成了的case! //if子进程抢到CPU的时间片先执行了,就让其休眠1s //确保执行顺序是:父进程执行完成后,再执行子进程printf("child process: pid==[%d],fpid==[%d]\n",getpid(),getppid());printf("child process"s global_var==[%d]\n",global_var);}else//pid > 0 时,则当前进程为父进程{ //pid_t getpid(void);//这个函数会返回调用该函数的进程的ID//(哪个进程调用它,它就返回谁的PID)printf("father process: pid==[%d],fpid==[%d]\n",getpid(),getppid());global_var++;printf("father process"s global_var==[%d]\n",global_var); //或者让父进程执行后先休眠2s,这样子也可以达到父进程优先执行到效果}return 0;}
result:
子进程先sleep 可以达到让父进程等子进程执行完成的效果!
or
父进程后sleep 可以达到让父进程等子进程执行完成的效果!
从结果我们可以看出来,虽然父进程对全局变量global_var进行++读写入操作,但是子进程的global_var并没有发生变化,也就是说父子进程之间do写操作时不能共享同一全局变量!√
if只是读操作,则可以共享同一全局变量! (把上述的global_var++;的代码注释掉!)
注意:父子进程的全局变量的虚拟地址空间是一样的!
在上述的test codes中的每个if语句后加入代码:
printf("child process"s global_var==[%d],&global_var==[%d]\n",global_var,&global_var);
result:
下面学习ps命令和kill命令:
ps命令:是指,查看进程相关信息的命令。最常用的ps命令是:ps -ef | grep pid这个命令就是用来找进程id==pid的某个进程的!这是 very 常用的!ps aux | grep "xxx"ps ajx | grep "xxx" -a:(all)当前系统所有用户的进程 -u:查看进程所有者及其他一些信息 -x:显示没有控制终端的进程(所谓的没有控制终端的进程,即:不能与用户进行交互(输入/输出)的进程) -j:列出与作业控制相关的信息 -A:显示所有进程 -e:等于“-A” -f:表达程序间的相互关系ps -ef //显示所有进程信息,连同命令行kill命令:是指,杀死(终止)某进程的命令。kill -l 查看系统有哪些信号kill -9 pid 杀死进程id==pid的某个进程
例子:
ps aux:(== ps -aux,不写-也OK)
(带?问号的就是没有控制终端的进程,不能与用户进行交互输入/输出)
补充: 一些英文缩写符号的意思是:
ps ajx:(== ps -ajx,不写-也OK)ajx就能看到更多的信息,比如PPID,表示的是这个进程的父进程id
ps -ef | grep bash:
kill -l(这是-小L即-l,不是-大ai即-I,虽然长得一样,但是得区分清楚!):
kill -9 pid: (在终端开一个sleep 350休眠350s的进程)
再输入 ps ajx命令来查看sleep 350这个进程的PID,然后就可以通过kill -9 pid来杀死对应PID的某个进程了!
下面我们将继续学习:
4exec函数族:
4.1 函数作用和函数介绍
有的时候,我们需要在一个进程中,执行其他的命令或者是运行用户自定义的应用程序,此时就用到了exec函数族中的函数了。
使用方法一般都是在父进程里面调用fork函数创建子进程,然后再在子进程中调用exec函数。
注意:我们这里,只学习exec函数族中,用得最多的2个函数!学会这2个函数即可。万一后续你要用到另外一些函数的话,你大可以用man exec命令来查看对应的函数原型和用法,然后你就无师自通了!
①execl函数:int execl(path,"命令名称","命令对应的参数",NULL));
那么,什么时候这个函数会执行失败呢?答,最直观最简单的case就是:当你要拉起来的这个应用程序根本就不存在时,那肯定是执行失败的!
其次,这里的路径path其实也可以是相对路径,只要你写的路径能找到对应的应用程序or命令即可!
只要你想在一个进程内部,去执行linux系统的命令或者说应用程序的话,应优先想到如下方式:
先fork,然后再在子进程中用execl函数拉起一个可执行程序or命令//codes:pid = fork();if(pid == 0){ execl(...);}
总结:
exec函数是用一个新程序替换了当前进程的代码段,数据段、堆和栈;原有的进程空间并没有发生变化,也并没有创建新的进程,且进程的PID也没有发生变化。
test codes:
//execl函数的测试代码,测试用execl函数拉起一个应用程序or命令#include#include#include#include#includeint main(){//创建子进程函数原型://pid_t fork(void);pid_t pid = fork();if(pid < 0)//fork失败的case{perror("fork error!");return -1;}else if(pid == 0)//pid == 0 时,则当前进程为子进程{printf("child process: pid==[%d],fpid==[%d]\n",getpid(),getppid());//linzhuofan@VM-12-8-ubuntu:~$ which ls///usr/bin/lsexecl("/usr/bin/ls","ls","-ltr",NULL);//if成功拉起这个ls命令的话,则execl函数后序的代码并不会给执行!perror("execl error!\n");}else//pid > 0 时,则当前进程为父进程{ //pid_t getpid(void);//这个函数会返回调用该函数的进程的ID//(哪个进程调用它,它就返回谁的PID)printf("father process: pid==[%d],fpid==[%d]\n",getpid(),getppid());}return 0;}
result:
test codes2:
//execl函数的测试代码,测试用execl函数拉起一个应用程序or命令#include#include#include#include#includeint main(){//创建子进程函数原型://pid_t fork(void);pid_t pid = fork();if(pid < 0)//fork失败的case{perror("fork error!");return -1;}else if(pid == 0)//pid == 0 时,则当前进程为子进程{printf("child process: pid==[%d],fpid==[%d]\n",getpid(),getppid());//linzhuofan@VM-12-8-ubuntu:~$ which ls///usr/bin/ls//execl("/usr/bin/ls","ls","-ltr",NULL);execl("./test","test","hello","world","ni","hao!",NULL);//if成功拉起这个ls命令的话,则execl函数后序的代码并不会给执行!perror("execl error!\n");}else//pid > 0 时,则当前进程为父进程{ //pid_t getpid(void);//这个函数会返回调用该函数的进程的ID//(哪个进程调用它,它就返回谁的PID)printf("father process: pid==[%d],fpid==[%d]\n",getpid(),getppid());}return 0;}test.c:#includeint main(int argc,char* argv[]){int i = 0;for(i=0;i
result2:
先do
后do
②execlp函数:int execl(const char* file,const char* arg,.../*(char *)NULL*/);
(命令名字/可执行程序名字,命令,命令的参数1,命令的参数2,....,NULL)
test codes:
//execlp函数的测试代码,测试用execlp函数拉起一个应用程序or命令#include#include#include#include#includeint main(){//创建子进程函数原型://pid_t fork(void);pid_t pid = fork();if(pid < 0)//fork失败的case{perror("fork error!");return -1;}else if(pid == 0)//pid == 0 时,则当前进程为子进程{printf("child process: pid==[%d],fpid==[%d]\n",getpid(),getppid());execlp("ls","ls","-ltr",NULL);execlp("./test","test","hello","world","ni","hao!",NULL);//if成功拉起这个ls命令的话,则execl函数后序的代码并不会给执行!perror("execl error!\n");}else//pid > 0 时,则当前进程为父进程{ //pid_t getpid(void);//这个函数会返回调用该函数的进程的ID//(哪个进程调用它,它就返回谁的PID)printf("father process: pid==[%d],fpid==[%d]\n",getpid(),getppid());}return 0;}
result:
test codes2:
//execlp函数的测试代码,测试用execlp函数拉起一个应用程序or命令#include#include#include#include#includeint main(){//创建子进程函数原型://pid_t fork(void);pid_t pid = fork();if(pid < 0)//fork失败的case{perror("fork error!");return -1;}else if(pid == 0)//pid == 0 时,则当前进程为子进程{printf("child process: pid==[%d],fpid==[%d]\n",getpid(),getppid());//execlp("ls","ls","-ltr",NULL);execlp("./test","test","hello","world","ni","hao!",NULL); //==> execlp("test","hello","world","ni","hao!",NULL);//if成功拉起这个ls命令的话,则execl函数后序的代码并不会给执行!perror("execl error!\n");}else//pid > 0 时,则当前进程为父进程{ //pid_t getpid(void);//这个函数会返回调用该函数的进程的ID//(哪个进程调用它,它就返回谁的PID)printf("father process: pid==[%d],fpid==[%d]\n",getpid(),getppid());}return 0;}
result:
test codes3:
//execlp函数的测试代码,测试用execlp函数拉起一个应用程序or命令#include#include#include#include#includeint main(){//创建子进程函数原型://pid_t fork(void);pid_t pid = fork();if(pid < 0)//fork失败的case{perror("fork error!");return -1;}else if(pid == 0)//pid == 0 时,则当前进程为子进程{printf("child process: pid==[%d],fpid==[%d]\n",getpid(),getppid());execlp("test222","hello","world","ni","hao!",NULL); //==> execlp("test222","hello","world","ni","hao!",NULL); //注意:test222文件夹我并没有创建!这肯定会执行perror的!//if成功拉起这个ls命令的话,则execl函数后序的代码并不会给执行!perror("execl error!\n");}else//pid > 0 时,则当前进程为父进程{ //pid_t getpid(void);//这个函数会返回调用该函数的进程的ID//(哪个进程调用它,它就返回谁的PID)printf("father process: pid==[%d],fpid==[%d]\n",getpid(),getppid());}return 0;}
result3:
标签:
- Linux系统编程之我的学习笔记1_linux函数学习心得
- 内蒙古自治区鄂尔多斯市2023-08-03 12:47发布高温橙色预警
- 房地产板块持续走高 财信发展、珠江股份午后涨停
- 女子孕期忽略孕检引发悲剧,孩子出生后哭闹不止,三岁仍不会说话
- 女子脚底扎入2cm铁丝在医院爬着走 网友:隔着屏幕感觉到痛
- 闪耀暖暖四周年是什么时候
- 紫罗兰翡翠看上去碎冰一样
- 城建发展:8月2日融券卖出64.14万股,融资融券余额7.31亿元
- Tuttosport:米兰对阿德利和萨勒马克尔斯...
- 找准家风“微切口” “普”写治理“大文章”——富源县胜境街道四屯社区创新家风普法实践
- 东京巨型地下神殿成功排除洪水,日本技术引人注目。
- 皇帝上早朝的地方叫什么殿,皇上早朝的宫殿叫什么
- 盐津铺子净利润同比增90.69% 销售渠道向电商持续倾斜
- 经济日报:消费升级态势没有改变
- 上半年湖南新增装机规模居全国第一
- 留几手:自媒体如何面对黑粉,以及这两年网民的转性?
- 一图看懂|7月新能源汽车销售战绩:比亚迪领跑 多个品牌创新高
- “敬礼娃娃”郎铮 他用敬礼那只手擎举起大运火炬
- 佛系是什么意思网络用语 网络流行语佛系是什么意思
- 江苏无锡打通政府联系服务群众“最后一公里”
- 南京银行扬州分行开展“安全生产月”系列活动
- 莫拉塔:作为球员无法掌控转会市场,在马竞很开心期待继续工作
- 服务乡村振兴|农发行四川分行激活自贡“三农”发展新引擎
- 新款岚图FREE即将上市,搭载百度Apollo高阶智驾
- 三天≈两年 华北这场雨到底有多大
- 西安至北京列车投诉
- 8月1日基金净值:广发养老指数A最新净值0.941,跌0.71%
- 暴雨中那些温暖的瞬间
- 日产能90万吨 民生工程水厂提升改造完成
- 枪火重生英雄玩法(元素手雷猫)
- 青岛中山商城地下人防停车场试运行
- 禁止!严查!今天起,北京新规实施!
- 炒鱿鱼好吃的关键是焯水吗(炒鱿鱼好吃的关键是焯水吗为什么)
- 支教团为乡村留守儿童打开一扇“科技窗”
- 碧桂园澄清配股融资传闻:并未就建议交易订立最终协议,现阶段也不考虑
- 上海体育消费券活力“上新”!8月5日美团、大众点评开抢
- 金属表面处理工艺公司 金属表面处理工艺有哪些
- 8月3日上线 PC游戏《卡拉彼丘》送奖励
- 漯河:着力打造农机化高质量发展新高地
- 《遗迹2》血月触发能做什么?
- 永辉超市:“京东洽谈全资收购永辉”报道不实;水晶光电终止分拆子公司至创业板上市
- 数字里看发展 中国对外经贸合作展现强劲韧性和蓬勃活力
- “青”出于“蓝”,超燃宣传片致敬文职人员
- 夏季行动|巨野北城派出所联合巡特警大队抓获一名网上在逃人员
- “组织+产业+乡村建设” 茂名到永村撬动治理大效能
- 香榧产业的市场规模和前景
- 致敬逆行者!北京铲车司机洪流中逆行救下一家三口!当事人发声
- 三安光电:目前公司碳化硅各环节业务顺利推进
- 蓝天燃气(605368.SH)向不特定对象发行可转债申请获得中国证券监督管理委员会同意注册批复
- 龙之谷圣徒刷图加点,龙之谷圣徒妙手加点,轻松刷图升级!
-
济南历城二中女足载誉归来,高铁上女孩们吃上家乡菜
视频加载中 齐鲁网·闪电新闻8月2日讯北京时间7月29日凌晨,济南历城
-
图片新闻
7月28日,输电运维人员划着皮划艇在对重点线路开展特巡。进入雨季,渤
-
“菜市场”成年轻人City Walk打卡地
北京三源里、上海蒙西、杭州红石板……在一二线城市,菜市场正成为
-
北京河北等地发生洪涝 中部战区组织官兵和民兵紧急救援
近日,河北省涿州市境内河流水位暴涨,发生超警洪水。第82集团军某旅接
-
龙虎榜丨1.19亿资金抢筹浙江世宝,机构和北向在太平洋上出现分歧(名单)
龙虎榜丨1 19亿资金抢筹浙江世宝,机构和北向在太平洋上出现分歧(名单
-
安达维尔拟5.05亿元投建天津航空装备研发生产基地
安达维尔公告,公司董事会会议和监事会会议分别审议通过议案,同意与天
-
让红树林成为人与自然和谐共生的典范
茂密的红树林里,成群的白鹭或展翅起舞,或栖息觅食;树下滩涂的招潮蟹
-
东营市河口区:产业联合抱团发展 跑出乡村振兴加速度
“山东泉鸿食品有限公司加入后,每年能够带动集体增收15万元,并解决80
-
泰禾智能:拟1000万元参设基金 主投半导体行业等高新技术领域
泰禾智能8月1日公告,根据公司战略发展规划,在稳固发展公司主业的同时
-
连续10年入百强 上汽集团名列2023《财富》世界500强第84位
8月2日,《财富》杂志发布的2023年世界500强排行榜显示,上汽集团以202
-
停运!调整!长春站最新发布
2日,长春晚报全媒体记者从长春火车站获悉,受降雨影响长春站临时变更
-
英菲尼迪g25真实油耗(英菲尼迪g25油耗多少钱一公里)
g25的百公里油耗为11升。英菲尼迪g系列车型是中型轿车,这款车一共使用
-
2023LPL夏季赛季后赛战报:GALA卡莎全场游龙 LNG再下一城
2023LPL夏季赛季后赛战报:GALA卡莎全场游龙LNG再下一城,让我们一起来
-
巨齿鲨2:深渊终极预告片和海报公布:吴京和杰森·斯坦森强强联手
8月2日,由杰森·斯坦森和吴京主演的电影《巨齿鲨2:深渊》宣布将于8月
-
北向资金净流出超40亿元
北向资金净流出超40亿元
-
中国一冶科工武汉江夏粮食应急储备保障中心项目开工
原标题:中国一冶科工武汉江夏粮食应急储备保障中心项目开工 工人日报
-
第二十四章
凌剑,你还记得吗,那个对你百依百顺,那个无论什么时候都不会轻易地丢
-
长期借款利息计入什么科目(长期借款)
导读1、长期借款的概念长期借款是指企业向银行或其他金融机构借入的期
-
iPhone 15 Pro将是苹果三年来最大的iPhone升级!
iPhone15Pro将是苹果三年来最大的iPhone升级!
-
北京:140年来最大降雨
市气象台发布:本次降雨过程极值已显著超过北京地区记录到的降雨极值,
-
南威软件(603636):8月1日北向资金减持1.76万股
8月1日北向资金减持1 76万股南威软件。近5个交易日中,获北向资金增持
-
puma是什么牌子(puma是什么牌子档次)
1、PUMA是德国运动品牌,中文名称为彪马,于1948年在德国荷索金米兰成
-
《梦想世界3》手游兵魔之争活动开启
《梦想世界3》手游即将推出一项名为
-
天津商业保理“稳链补链强链”成效显著
今年,天津市金融创新又一张名片——商业保理行业的资产总额首次突破30
-
财政部、水利部安排4.099亿元水利救灾资金,支持河北等地水旱灾害防御工作
据水利部消息,7月31日,财政部、水利部安排水利救灾资金4 099亿元,支
-
察右中旗供电巡查设备备战主汛期
7月27日下午,一场突如其来的暴雨袭击了乌兰察布察右中旗,造成多条10K
-
日租电池,一天只要50!蔚来:这波我在“大气层”
一天只要50块?前段时间,蔚来汽车推出了电池日租服务。用户可以选择按
-
「黑武士」装扮太酷了!全新配色 Nike AF1 来了!
1985年对于Nike来说可谓是一个里程碑般的年份。在这一年,他们推出了Ai
-
早期宫颈鳞癌可行保留卵巢阴道延长术
患者主诉为:“发现宫颈鳞状细胞癌半年余”,近期在我院宫颈活检病理:
-
中国医疗队母婴救治中心在坦桑尼亚桑给巴尔挂牌
新华社达累斯萨拉姆8月1日电(记者谢昊)7月31日,中国医疗队母婴救治中
-
新疆墨玉有何功效
墨玉是一种罕见的宝石,被认为在风水学和中医中具有一些功效。以下是一
-
8月2日生意社己二酸基准价为9480.00元/吨
8月2日,生意社己二酸基准价为9480 00元 吨,与本月初(9360 00元 吨)相
-
五接镇三举措筑牢夏季食品安全防线
五接镇三举措筑牢夏季食品安全防线五接镇供稿(顾靓马正祥)夏季高温季
-
盛宴难再:品胜IPO与失去的十年
购买过10元数据线的人,大概率都见过“品胜”这个牌子,但除了便宜的数
-
高质量发展 |南大扬州化学化工研究院:聚合创新要素 “智”撑高质量发展
南京大学扬州化学化工研究院是我市新材料板块重要的创新载体,近年来,
-
南航贵州公司暑运首月迎来史上最大客流量
南航贵州公司暑运首月迎来史上最大客流量
-
2023年6月10-15万美系车销量排行榜,威朗以12576辆夺冠,昂科拉升至第10名
2023年6月的乘用车销量数据已经出炉,据众车网汽车行业数据监测显示,6
-
Meta据悉拟最早下月推出AI聊天机器人,着力增强用户留存率
据报道,知情人士透露,Meta计划最早于9月推出一系列能呈现不同个性的
-
网传“被暴雨冲垮”的北京顶奢酒店最新回应:在店宾客已平安转移
8月1日,@北京悉昙酒店发布消息,在暴雨与山洪灾害来临之际,酒店迅速
-
这彩蛋2年没人发现,再次出现引出《银护3》,和奇异博士关系密切
《无敌浩克》最后钢铁侠彩蛋 而除他之外,还有一位2年前登场的彩蛋角色
-
新的保险杠喷漆需要多久(保险杠喷漆需要多久?)
相信大家对新的保险杠喷漆需要多久,保险杠喷漆需要多久?的问题都很疑
-
滨城这个产业集群参评“国家级”
日前,天津市工业和信息化局组织开展了2023年度市级中小企业特色产业集
-
太过爱你钢琴简谱(太过爱你的歌词!)
1、歌曲:太过爱你歌手:戚薇by:IN-CORNER戚薇-太过爱你词曲:吕雯制作人:
-
霍姆格伦:杰伦-威廉姆斯是纯粹的篮球手 他有体型优势技巧娴熟
直播吧8月1日讯近日雷霆球员霍姆格伦参加了播客节目《ShowtimeBasketba
-
康方业绩预告:2023 H1 利润约 23 亿!实现首次盈利
7月31日,康方发布正面盈利预告,根据截至2023年6月30日的未经审核综合
-
纳指低开0.5% 美国超导暴涨58%
格隆汇8月1日丨美股三大指数低开,纳指跌0 5%,标普500指数跌0 28%,道
-
直击北京暴雨:有房屋被冲进河流 门头沟河水暴涨汹涌翻滚!
直击北京暴雨:有房屋被冲进河流门头沟河水暴涨汹涌翻滚!今天的关注度
-
百度地图2023Q2交通报告:近八成城市通勤高峰交通拥堵指数同比上涨
电商报快讯:8月1日消息,百度地图联合清华大学数据科学研究院交通大数
-
男子乘电梯殴打他人还自称“黑社会”?天桥公安:已行政拘留
乘坐电梯时,与他人发生争执,随后推搡殴打他人,并自称“黑社会”——
-
园林专业就业前景与就业方向(园林专业就业前景女生)
来为大家解答以上的问题。园林专业就业前景与就业方向,园林专业就业前
X 关闭
X 关闭