c - c中的Execl(传递参数)

标签 c exec fork

我对这段代码有疑问,因为这个循环没有正确地将参数传递给子进程,并在 fork 中产生了一些错误。

nproc 是要创建的数字进程,例如 5 x 设置为 1 值,我想将 1,2,3 传递给我的新进程,因此每个进程都作为数字并将其写入文件 ...

我不知道我能做什么..请帮忙

但第二个参数 righeoperazione 是 5 并且传递正确但因为总是相同 我将 2 类型的 int 和转换的字符串转换为 exec 的父亲代码

/* father process*/
char param[0]="";
char param1[0]="";
for (i=0 ; i<NPROC ; i++) {
pid=fork();
 if (pid==-1) { // pid=-1; error process 
                    write(STDOUT,"fork error pid -1 ", 18);
                    }
 else if (pid==0) {
           sprintf(param1,"%d",x);
           sprintf(param,"%d",righeoperazioni); 
           execl("processore.x","processore.x",&param,&param1,(char *)NULL);
           write(STDOUT,"fork error ", 11);
           }
 else { write(STDOUT,"fork error else ", 15); }
 x++;           
} 

int main(int argc, char *argv[]) {//子进程

int nump=0;
int righe;
int oper=0;
char nome[10];
char temp[10];
    char temp1[10];

    nump=atoi(argv[2]);                  //
    oper=atoi(argv[1]);                  //


    righe=oper;
sprintf(nome,"%d",getpid());
int report = openFile(nome,O_CREAT | O_RDWR,S_IRUSR | S_IWUSR); 
sprintf(temp,"%d",nump);
sprintf(temp1,"%d",oper);
    stampa(report,"Number processo : ",18);
stampa(report,temp,strlen(temp));
stampa(report,"\Number comandi : ",18);
stampa(report,temp1,strlen(temp1));
stampa(report,"\n",1);

捕获 2 个参数的子代码(stampa 与 write 相同,但使用 -1 控制)

最佳答案

您提供的是 execl char** 而不是您应该提供的 char*。 尝试

execl("processore.x","processore.x",param,param1,(char *)0);//EDIT!!!

同时声明 param1 和更大尺寸的 param

char param1[64], param[64];

为了保存您的“冲刺”整数。

关于c - c中的Execl(传递参数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17149125/

相关文章:

python - exec 不从闭包中获取变量

c - 在 C 中 fork 后从 SHM 编辑结构中的变量

c - fork() 函数在 if 语句中的行为如何?

c - Printf 停止终端工作

CRC位序困惑

php - exec 函数未按预期工作

c - 将Pthread转换为进程fork()

c++ - 在 C++ 中包含头文件时尖括号 < > 和双引号 ""之间的区别?

c - 宏函数的不需要的(或不稳定的)结果

Java - 使用 Runtime.getRuntime().exec 启动的进程(无法创建临时文件