- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试弄清楚如何在 SunOS 上执行 system()
函数调用(用 C 语言),并且没有将任何内容打印到 stderr(或 stdout) 。目前,以下代码可在 Linux、OSX、HP-UX 和 SunOS 上编译/运行。在除 SunOS 之外的所有操作系统上,我都会得到类似以下内容的良好输出:
i = 32512 (0x7f00); wexitstatus = 127
但是,在 SunOS 上我得到:
sh: unknowncommand: not found
i = 256 (0x100); wexitstatus = 1
...额外的“sh:”行很烦人:)
(我的目标:安静地以编程方式确定我是否可以执行“cc”和/或“gcc”命令。)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/wait.h>
int main (int argc, char **argv)
{
int i;
char buf [1000];
strcpy (buf, "unknowncommand -c foo.c > /dev/null 2>&1");
i = system (buf);
printf ("i = %d (0x%x); wexitstatus = %d\n", i, i, WEXITSTATUS (i));
return 0;
}
最佳答案
which 命令将查找位于 PATH 变量中的可执行文件。
which gcc
which cc
您可以在系统调用中使用它。
这是穷人的版本:
// performs task similar to which command
// mywhich.c
char **split(char **result, char *w, const char *src, const char *delim)
{
char *p;
w=strdup(src);
int i=0;
for(p=strtok(w, delim); p!=NULL; p=strtok(NULL, delim))
{
result[i++]=p;
result[i]=NULL;
}
return result;
}
char *detect_cc(char *cc, char **argv)
{
char search[PATH_MAX]={0x0};
char resolved[PATH_MAX]={0x0};
char *w=NULL;
int i=0,j=0;
char *result[1024]={NULL}; // set 1024 to appropriate value
char *PATH=getenv("PATH");
*cc=0x0;
split(result, w, PATH, ":");
for(i=0 ; !*cc && result[i]!=NULL; i++)
{
for(j=0; argv[j]!=NULL; j++)
{
sprintf(search,"%s/%s", result[i], argv[j]);
if(realpath(search, resolved)!=NULL)
{
if(access(resolved, X_OK)==0)
strcpy(cc, resolved);
}
}
}
free(w);
return cc;
}
int main(int argc, char **argv)
{
char cc[PATH_MAX]={0x0};
argv++;
detect_cc(cc, argv);
if(*cc)
printf("found: %s\n", cc);
else
printf("Not found in PATH\n");
return 0;
}
用法:
./mywhich gcc cc foo
它会在找到的第一个文件处停止。修改代码以根据您认为合适的方式抑制消息。
关于c - SunOS 上的 stderr 上没有消息的 "system()"如何处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18994989/
交换命令:/usr/sbin/swap -s 我什至尝试了类似 awk '/total/{print $2}'/usr/sbin/swap -s 的东西,但给了我错误 交换输出: total: 124
我正在尝试构建一个需要 2 个时间戳的程序:第一个进程结束时的时间戳,然后是第二个进程开始时的时间戳。然后得到两者的增量。 但我无法编译,因为链接器提示 clock_gettime,给出 undefi
如何仅以秒为单位确定 SunOS UNIX 机器上的正常运行时间? 在 Linux 上,我可以简单地 cat/proc/uptime 并采用第一个参数: cat /proc/uptime | awk
我有一个非常简单的单元测试,只分配很多字符串: public class AllocationSpeedTest extends TestCase { public void testAllo
我刚刚登陆 SunOS: $ uname -a SunOS sunfi95 5.9 Generic_122300-13 sun4u sparc SUNW,Sun-Fire-880 并拥有Sun工作室:
我正在关注 sed命令替换 xml 文件中的内容。 sed -e '//{ s;;;}' ${modified_name_file} > ${RESOURCES}/tempfile2.xml 这在 L
我在标题中提到了一个问题。 我的文件中有几行: 所以我需要获取"Hi" 标签的全部内容。但是我没有 gnu grep 并且无法安装它我不是机器上的根用户。我只能使用: Usage: gre
我刚刚开始使用 boost 库。对于我们的一个项目,我想使用 sun 编译器在 Sun OS 上编译 Boost 1.39.0。但是,如果我使用 http://www.boost.org/doc/li
我正在尝试让进程附加到 SunOS 上的端口 7085。我尝试了以下命令。 netstat -ntlp | grep 7085 没有返回任何内容 netstat -anop | grep 7085 也
我不确定我做错了什么。看起来 yanking 工作正常,但是当点击 p 粘贴时,我得到:E353: 寄存器中没有内容 " 我愿意: vim myFile V y :q! vim temp p 我错过了
我有一个在 Linux 下使用 GCC 4.2 开发的应用程序,它大量使用字符串流来包装和解包通过网络发送的数据。 (因为我使用的 Grid API 需要它)。在 Linux 下一切正常,但是当我部署
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
我正在尝试弄清楚如何在 SunOS 上执行 system() 函数调用(用 C 语言),并且没有将任何内容打印到 stderr(或 stdout) 。目前,以下代码可在 Linux、OSX、HP-UX
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我试图在编译时检测 Solaris/SunOS 版本,以便我可以启用/禁用 port_create() 的使用和其他 API。 编译时是否有标识 SunOS/Solaris 版本的 header ?
#include int main() { char *str = "11111111-22222222 r-xp 00000000 00:0e 1843624 /lib/libdl.so
我正在尝试将端口号映射到正在运行/使用 SunOS 中的端口的应用程序 $netstat -tlnp netstat: illegal option -- t 似乎 -t 选项在 SunOS 中是非法
我试图在 中获得以下结果 1. 文件归档为 tar,当前日期作为 tar 名称的一部分。2.文件一旦归档就被删除。 /usr/sap/ST1/POC/backtest/*.txt has 2 txt
我有一个 C 程序,它在 Linux 下编译和运行良好,没有任何警告,但是当试图在 SunOS 上编译它时,我收到以下警告: test.c: In function `my_function': te
我执行了下面的 C 程序,它打印了给定 N (N #include #include #include int main() { FILE *fpin,*fpout; char ch[11], fi
我是一名优秀的程序员,十分优秀!