gpt4 book ai didi

c - execl 命令写入文件

转载 作者:行者123 更新时间:2023-11-30 15:49:54 25 4
gpt4 key购买 nike

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define MAXLINE 512
main(int argc,char* argv[]){
int k;

for (k=0; k<argc; k++) {
if (k%2==0) {
if (fork()==0){
execl("/user/bin/rev","rev",argv[k],">",argv[k],NULL);
exit(1);
}
}
else
{
if (fork()==0){
execl("/usr/bin/awk","awk","-f","ouk.awk",argv[k],">",argv[k],NULL);
exit(1);


}
wait(0);
}

}
}

awk脚本

{ for (i=NF;i>=1;i--){ if(s){s=s" "$i} else{s=$i }}{print s;s=""}}

有人可以告诉我为什么这不起作用吗?我想做的是修改使用 awk 脚本或 rev 命令的文件 argv[i]

谢谢

最佳答案

要让管道 (>) 工作,需要涉及 shell。 OP 的代码不调用 shell,而是直接启动 awk 进程。

您可能想替换此行:

execl("/usr/bin/awk","awk","-f","ouk.awk",argv[k],">",argv[k],NULL);

由那些:

char cmd[PATHMAX] = "";
sprintf(cmd, "\"/usr/bin/awk -f out.awk %s > %s\"", argv[k], argv[k]);
execl("/bin/sh", "sh", "-c", cmd, (char *) NULL);
/* As execl() does not return if successful, getting here indicates an error! */
perror("execl() failed");

(这意味着 argv[k] 引用的字符串不包含空格。)

有关详细信息,请参阅 shell 的手册页。请注意,/bin/sh 通常链接到其他一些 shell 程序,例如 bash

关于c - execl 命令写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16020375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com