相关疑难解决方法(0)

在退出()状态下使用C over over除以256的WEXITSTATUS宏有什么好处?

我正在为大学做练习,我必须在退出时返回一个值,这个值实际上是一些东西.这可能高于255(exit()无法处理)但是老师建议使用测试数据,其中计数永远不会高于该值.

毕竟,我需要处理这个计数值,退出状态,我通过使用waitpid()在主进程中得到了这个值.令我惊讶的是,如果子进程返回1,则主进程中的"实际"值为256,2为512,依此类推......

我需要打印这个值,所以我简单地将它除以256并完成了.但是,如果我使用WEXITSTATUS()宏,我也会按照我想要的方式得到这个值...

我查看了C源代码,这是我发现的:

#define __WEXITSTATUS(status) (((status) & 0xff00) >> 8)
Run Code Online (Sandbox Code Playgroud)

我理解这里发生了什么,例如,二进制512是10 0000 0000,右移8'将得到00 0000 0010,即十进制2.在这个宏中我不明白的是&运算符和0xff00似乎是一个随机数的事实(它可能不是,它来自哪里?).这究竟是做什么的,为什么宏中有"&0xff00"?它不会有效吗?

在这个主题中真正的问题是,在我的代码中将此宏称为除以256是一回事吗?

c system-calls exit

12
推荐指数
1
解决办法
1万
查看次数

在c中使用System()调用Java文件

我正在尝试从 C 代码运行位于我的网络服务器上的 java 文件。当我加载网页时,perl 脚本调用 ac 文件,然后调用 java 文件。

我像在我的 c 文件中一样设置了调用:

System(java -cp <path> MyClass);
Run Code Online (Sandbox Code Playgroud)

但是这个 System() 调用返回 256 - (我认为文件未找到)。

我也尝试过:

System(cd /<path> && java MyClass);
Run Code Online (Sandbox Code Playgroud)

并得到相同的结果。

如果我通过 ssh 从终端运行完全相同的命令,它工作正常,只是当我尝试从浏览器运行代码时,它会出现此错误。

如果我的语法不正确,有什么想法吗?或者我做错了什么?它与我被迫使用的 perl > c > java 链有什么关系吗?

编辑看来 c 运行时没有查看 $PATH。我添加了java.exe的绝对路径,并且成功了!呜呜

总览

解决方案:

System("/opt/jdk1.6.0_43/bin/java -cp <path> MyClass");
Run Code Online (Sandbox Code Playgroud)

c java perl web-services

5
推荐指数
0
解决办法
396
查看次数

调用system()返回256

我想要 system() 在我的应用程序中打印 pstack 信息,但它失败并返回 256。但是我将如下代码拾取到一个新的主函数中,没关系。为什么?

char cmd[256] ;
string pstackCmd;
struct timeval tv;
struct tm lt;(&tv, NULL);

localtime_r(&tv.tv_sec, &lt);
sprintf(cmd, "pstack `pgrep app` > pstack_%04d%02d%02d%02d%02d%02d%03d",
                            lt.tm_year+1900,
                            lt.tm_mon+1,
                            lt.tm_mday,
                            lt.tm_hour,
                            lt.tm_min,
                            lt.tm_sec,
                            (int)(tv.tv_usec/1000));
pstackCmd = string(cmd);
int retValue = system(pstackCmd.c_str());
if ( retValue != 0)
{
    printf("pstack `pgrep app`,retValue:%d",retValue);
}
Run Code Online (Sandbox Code Playgroud)

c c++ solaris

2
推荐指数
1
解决办法
2万
查看次数

标签 统计

c ×3

c++ ×1

exit ×1

java ×1

perl ×1

solaris ×1

system-calls ×1

web-services ×1