嵌入式linux里程序中return-1什么意思return -1表示函数返回值是-1 。
return 表示把程序流程从被调函数转向主调函数并把表达式linux命令retur的值带回主调函数linux命令retur,实现函数值的返回linux命令retur,返回时可附带一个返回值,由return后面的参数指定 。
return通常是必要的,因为函数调用的时候计算结果通常是通过返回值带出的 。
如果函数执行不需要返回计算结果,也经常需要返回一个状态码来表示函数执行的顺利与否(-1和0就是最常用的状态码),主调函数可以通过返回值判断被调函数的执行情况 。
在函数中,如果碰到return 语句,那么程序就会返回调用该函数的下一条语句执行 , 也就是说跳出函数的执行,回到原来的地方继续执行下去 。但是如果是在主函数中碰到return语句,那么整个程序就会停止,退出程序的执行 。
linuxcp命令并显示拷贝时间在Linux系统里面用到 cp命令复制不能显示文件拷贝的进度,也不能计算还有多长时间文件可以 拷贝结束,现在写一个程序可以显示文件拷贝的进度 。
思路:当前目录下面有一个1G大小的bigfile文件
当我在命令行下面输入ls -lh bigfile,我会得到这个文件的详细信息,当然也可以看到文件的大小 。
ls -lh bigfile
-rw-rw-r-- 1 nii nii 1000M7月 13 19:41 bigfile
我们可以用popen函数,把执行之后的结果”-rw-rw-r– 1 nii nii 1000M 7月 13 19:41 bigfil”这串字符串接收下来,我们可以提取出来表示文件大小的那段字符串,比如这个我们可以提取”1000”在用atoi函数,把字符串转换为int型数值1000(不了解popen函数和atoi函数的请自行学习),就可以获得文件大小 。
例如我的文件名字叫mycp.c , 我执行gcc -o mycp mycp.c生成一个mycp的可执行文件 。
接下来我在命令行上输入./mycp bigfile destbigfile把当前目录下面的bigfile文件拷贝为destbigfile,这时我产生一个子进程,子进程负责调用系统的cp命令拷贝 , 父进程每隔一秒钟,去获取destbigfile、bigfile 文件的大小,就可以知道拷贝的进度,当然也可以获得拷贝的时间 , 就可以计算出来离拷贝结束还有多长时间 。
下面是代码的实现:
#include
#include
#include
#include
#include
#include
#include
/** 得到文件的详细信息 */
int getFileMsg(char* pchCmd,char *pchMsg);
int main(int argc,char* argv[])
{
char szSrcFileMsg[150] = {0};
char szSrcFileSizeMsg[10] = {0};
intnSrcFileSize = 0;
char szSDestFileMsg[150] = {0};
char szDestFileSizeMsg[10] = {0};
intnDestFileSize = 0;
int pid = 0;
/** shell执行的命令 ,在创建文件的时候使用*/
char szExcueCommand[150] = {0};
float fRate = 0;
int nUsedTime = 0;
float nLastTime = 0;
/** 入参必须是三个 */
if (1 == argc)
{
printf("please input the src and des file\n");
return -1;
}
/** 产生子进程 */
pid = fork();
/** 如果是子进程,负责执行复制命令 */
if (0 == pid)
{
sprintf(szExcueCommand,"%s %s %s","cp",argv[1],argv[2]);
printf("%s\n",szExcueCommand);
system(szExcueCommand);
return 0;
}
/** 父进程负责把正在复制的原文件和复制的目标文件的大小计算出来,就可以知道复制的进度,计算频率为1秒一次 */
else
{
/** 获得原文件的大小 */
if (-1 == getFileMsg(argv[1],szSrcFileMsg))
{
printf("get sorce file message failed \n");
return -1;
}
/** 把原文件大小的信息取出来 */
strncpy(szSrcFileSizeMsg,szSrcFileMsg 21,4);
szSrcFileSizeMsg[5] = '\0';
nSrcFileSize = atoi(szSrcFileSizeMsg);
while(1)
{
sleep(1);
nUsedTime;
/** 获得目标文件的大小 */
if (-1 == getFileMsg(argv[2],szSDestFileMsg))
{
printf("get dest file message failed \n");
return -1;
}
/** 把原文件大小的信息取出来 */
strncpy(szDestFileSizeMsg,szSDestFileMsg 21,4);
szDestFileSizeMsg[5] = '\0';
nDestFileSize = atoi(szDestFileSizeMsg);
/*** 计算复制的进度 */
fRate = (nDestFileSize * 100) / nSrcFileSize ;
/** 计算剩下的时间 */
nLastTime = ((100 - fRate) * nUsedTime) / fRate;
/** 打印进度条 */
printf("已复制 %.2f %%还需要%.1f秒\n",fRate,nLastTime);
/** 复制完成之后,退出循环 */
if (nSrcFileSize == nDestFileSize)
{
printf("复制完成,耗时 %d 秒\n",nUsedTime);
break;
}
}
}
return 0;
}
/** 得到文件的详细信息 */
int getFileMsg(char* pchCmd,char *pchMsg)
{
FILE *fstream=NULL;
char szBuff[BUFSIZ] = {0};
char szExcueCommand[150] = {"ls -lh"};
sprintf(szExcueCommand,"%s %s",szExcueCommand,pchCmd);
if (NULL==(fstream=popen(szExcueCommand,"r")))
{
perror("execute command failed: ");
return -1;
}
/** 得到命令的结果 */
if (NULL == fgets(szBuff, sizeof(szBuff), fstream))
{
pclose(fstream);
return -1;
}
pclose(fstream);
strcpy(pchMsg,szBuff);
return 0;
}
Linux下执行结果为:
./mycp bigfile destbigfile
cp bigfile destbigfile
已复制 3.00 %还需要32.3秒
已复制 5.00 %还需要38.0秒
已复制 8.00 %还需要34.5秒
已复制 10.00 %还需要36.0秒
已复制 12.00 %还需要36.7秒
已复制 13.00 %还需要40.2秒
已复制 14.00 %还需要43.0秒
已复制 17.00 %还需要39.1秒
已复制 20.00 %还需要36.0秒
已复制 21.00 %还需要37.6秒
已复制 24.00 %还需要34.8秒
已复制 24.00 %还需要38.0秒
已复制 27.00 %还需要35.1秒
已复制 32.00 %还需要29.8秒
已复制 33.00 %还需要30.5秒
已复制 35.00 %还需要29.7秒
已复制 38.00 %还需要27.7秒
已复制 41.00 %还需要25.9秒
已复制 42.00 %还需要26.2秒
已复制 43.00 %还需要26.5秒
已复制 44.00 %还需要26.7秒
已复制 48.00 %还需要23.8秒
已复制 50.00 %还需要23.0秒
已复制 52.00 %还需要22.2秒
已复制 53.00 %还需要22.2秒
已复制 53.00 %还需要23.1秒
已复制 57.00 %还需要20.4秒
已复制 59.00 %还需要19.5秒
已复制 61.00 %还需要18.5秒
已复制 63.00 %还需要17.6秒
已复制 63.00 %还需要18.2秒
已复制 66.00 %还需要16.5秒
已复制 69.00 %还需要14.8秒
已复制 70.00 %还需要14.6秒
已复制 72.00 %还需要13.6秒
已复制 73.00 %还需要13.3秒
已复制 75.00 %还需要12.3秒
已复制 78.00 %还需要10.7秒
已复制 79.00 %还需要10.4秒
已复制 82.00 %还需要8.8秒
已复制 83.00 %还需要8.4秒
已复制 84.00 %还需要8.0秒
已复制 87.00 %还需要6.4秒
已复制 90.00 %还需要4.9秒
已复制 91.00 %还需要4.5秒
已复制 93.00 %还需要3.5秒
已复制 93.00 %还需要3.5秒
已复制 96.00 %还需要2.0秒
已复制 99.00 %还需要0.5秒
已复制 100.00 %还需要0.0秒
复制完成,耗时 50 秒
linux中shell编程中的return在里面有什么作用1、终止一个函数.
2、return命令允许带一个整型参数, 这个整数将作为函数的"退出状态
码"返回给调用这个函数的脚本, 并且这个整数也被赋值给变量$?.
3、命令格式:return value
linux执行命令停止无限弹linux执行命令停止无限弹如下
先来写一个需要一直运行的程序,比如 Flask 版的 Hello World$ vi hello.pyfrom flask import Flaskapp = Flask(__name__)pp.route('/') index():return hello world'if __name__ == '__main__':app.run(host='0.0.0.0') pip install flask$ python hello.p启动成功控制台提示:* Running on(Press CTRL C to quit)此时打开浏览器访问 http://你的服务器ip:5000 即可看到 Hello World 了按 CTRL C 退出,如果想让程序一直运行又想同时做其他事怎么办?
CTRL Z 暂停程序程序在前台运行时,按下 CRTL Z, 程序进入暂停状态[1]74237 suspended python hello.py此时你又可以在终端下敲其他命令了 。但刷新浏览器,长时间没有响应,因为程序进入暂停状态了 。jobs 列出后台运行的命$ jobs[1] - suspended python hello.py
再来启动一个命令,比如$ tail -f hello.py然后 CTRL Z 暂停,再运行下 jobs 命令前面的[1] [2] 是任务编号,- 和接下来要说的 fg、bg 命令有关,suspended 那一栏表示状态,剩下的就是命令
要把一个程序放在后台运行,照上面的做法,得先运行,然后 CTRL Z 暂停,再用 bg 命令放到后台运行 。使用来简化这一过程,并且使用来重定向后台运行的程序在终端上的输出 。
linux如何用命令行更改每个窗口的位置用法是:
1、需要打开一个窗口 。打开命令行终端窗口 。xmonad提供一个功能键,称为mod键(modifier的缩写),所有操作都要使用这个键,默认为alt键 。
2、打开终端窗口,按下mod shift return(默认为alt shift return) 。这会打开一个终端窗口,占据了所有桌面空间 。
【包含linux命令retur的词条】linux命令retur的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、linux命令retur的信息别忘了在本站进行查找喔 。
推荐阅读
- 有什么处理视频的软件,有什么处理视频的软件好用
- js获取系统当前月份第一天,js获取下个月
- 视频打不开用什么模式,有些视频打不开用什么软件
- 关于postgresqllinux启动下载的信息
- 如何理解c语言中的函数 c语言中函数的概念
- 用python计算个人所得税流程图,用python计算个人所得税流程图表
- 关于索尼折叠手机为什么这么火的信息
- 2018gis制图热点主题,gis热点图 制作
- php留言板数据库表 php实现留言板