从C 中的系统函数中获取整数(大于255)
Obtaining an integer (greater than 255) from the system function in C++
我有一个相对简单的问题,我似乎做不到。我需要做的是使用C 程序中的system
函数从BASH脚本中检索整数。我的理解是默认情况下system
返回一个整数,所以我应该做
int returnedVal = system ("myscript");
然而,主要问题是bash脚本没有返回值,仅在0到255之间的标志才能成功。我尝试做一些事情,例如在脚本中写入文本文件,然后在文件中阅读,但是这引起了一些问题,我想避免使用。有人知道最简单的方法吗?非常感谢。
posix exit(3)说:
状态的值可能为0,exit_success,exit_failure,[cx] [选项 启动]或任何其他值,尽管只有最低的8位 (即状态& 0377)应向等待的父母使用 过程。
这意味着没有大于8位可以通过呼叫exit
从正常过程终止终止的值更大的值,然后父母无法捕获更多。
更多。不要使用返回的值传输一些数据,它主要旨在代表成功或失败状态。0值代表成功,其他任何失败。
如果您希望您的流程进行交流,则需要一些通信频道(文件,管道等)。
如果 myscript
-例如许多脚本或程序 - 在其 stdout 上写(例如某些数字或字符串)(例如某些数字或字符串),您可以使用(ON ON)POSIX)POPEN(3)在您的程序中。成功的popen
将为<stdio.h>
例程提供FILE*
流(您可以使用fscanf
等阅读)。
(我猜您正在使用一些Linux或Posix系统)
但是系统(3)捕获出口(3)状态(实际上也是其他终止,例如信号(7)-s,请参见myscript
的WaitPID(2))。它不在乎插入程序标准输出中的myscript
的输出。
不要忘记使用PCLOSE(3)(不是fclose
)关闭popen
-ED流。另请阅读管道(7)。
例如,此代码从wc -l /etc/fstab
命令
FILE*p = popen("wc -l /etc/fstab", "r");
if (!p) { perror("popen"); exit(EXIT_FAILURE); };
int n= 0;
if (fscanf(p,"%d", &n)<=0) { perror("fscanf"); exit(EXIT_FAILURE; };
if (pclose(p)>0) /*wc failed*/ exit(EXIT_FAILURE);
printf("your fstab has %d linesn", n);
您应该阅读高级Linux编程(可自由下载)。您可能需要使用其他东西(例如,某些系统调用,例如fork(2),execve(2),waitpid(2),pipe(2),dup2(2);请参见syscalls(2))。
还有许多其他方法可以进行一些过程间通信,包括FIFO(7)-S和插座(7)-s。
使用popen
或system
,当心注入代码注入,某些计算的字符串包含命令。
一些库(特别是C 的QT或POCO)提供其他运行程序和与它们进行通信的方式。
system
人页面说,在讨论了各种失败之后:
如果所有系统调用成功,则返回值是 用于执行命令的子弹的终止状态。 (外壳的终止状态是终止状态 它执行的最后一个命令。)
为了清楚起见,可以补充说,Shell的退出值是exit
命令的数值参数,或者Mdash;如果没有遇到&mdash;执行的最后一个命令的退出状态,即$?
的值。该退出值由操作系统通过waitpid()
函数传递给Shell的父(可能是另一个外壳)。这样,"叶"过程的退出状态被传播到达到system
,最后您的程序。
我不明白为什么您想做什么不可能。
- 如何反转整数参数包
- enum是C++中的宏变量还是整数变量
- 努力将整数转换为链表。不知道我在这里做错了什么
- 整数不会重复超过随机数
- 如何找到大于整数的最小数字
- 如果变量数据包含大于 vector 所有元素的整数,则仅在视觉工作室上接收"矢量下标超出范围"?
- 16 位系统中的程序如何访问大于 65535 的整数,但不能访问地址
- 如何在 c++ 中解析包含整数的字符串并检查是否大于最大值
- 从C 中的系统函数中获取整数(大于255)
- 在整数中存储大于 INT_MAX 的数字
- 如何乘以大于 uint64 的整数
- 查找大于或等于 x(正整数)z 倍数(正整数,可能是 2 的幂)的最小整数
- 如何返回小于或等于平均值的整数和大于平均值的整数
- 分解大于 100 位的整数
- 大于无符号长整型的整数类型,以及库
- 如何在C++中保存大于 64 位的整数
- 检查输入是否为整数或大于零
- 我如何从一个8位整数中得到一个大于8位的值
- 如何将一个整数除以另一个大于零的数并给出余数
- 在 32 位 Windows 上大于 4294967295 的整数