This question already has answers here:
Redirecting exec output to a buffer or file
                                
                                    (5个答案)
                                
                        
                                3年前关闭。
            
                    
我遇到了使execl无法正常工作的问题。

pid_t pid = fork();

if(pid<0) {
perror("fork error\n");

} else if( pid== 0){
execl("/home/"user name"/opSys", "ps", ">>", "test.txt", (char*)NULL);

} else  {

int returnStatus;
waitpid(pid, &returnStatus, 0);

}


我试图让它运行命令,然后输出到我的文本文件,但是什么也没发生。我一直在谷歌搜索并尝试找到的东西,例如不同的执行人员。我试过execlp(),我试着只是使其使用ps ant而不是将其放入文件中。

如果确实已经回答了,我对此表示歉意,但是我找不到适合我的解决方案。
提前致谢。

最佳答案

我假设您命令中的>>应该创建输出的重定向。但是,这里不是这种情况。在命令行中给出时,操作符>>由shell解释;该命令仅将参数取为最大值,并将其排除在外。然后,shell会确保文件描述符被正确处理以进行重定向。

在您的情况下,该命令将获得三个参数,即给定的字符串ps>>test.txt。这就像打字

 command ps '>>' test.txt


这样,您正在调用的命令可能并不会执行太多操作,可能会在stderr上给出一条错误消息,告知它接收到的错误参数(您可能错过了)。

我建议您尝试调用shell来帮助您解释命令并将命令作为字符串传递:

execl("/bin/sh", "-c", "/home/"user name"/opSys ps >> test.txt",
    (char*)NULL);

关于c - 无法使excel()正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42237499/

10-13 07:40
查看更多