【问题标题】:Execl (passing parameters) in cc中的Execl(传递参数)
【发布时间】:2013-06-13 12:02:25
【问题描述】:

我对这段代码有疑问,因为这个循环没有将参数正确地传递给子进程并使用 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 控制)

【问题讨论】:

  • 请修复一下缩进,明显坏了。
  • 这个问题很难回答。
  • write(STDOUT,"fork error else ", 15); -- 你不是更喜欢printf("fork error else "); 吗?除了不必计算输出之外,您还可以提供动态输出:)
  • 不幸的是,我必须使用系统调用...这是 OS 的项目。我的考试

标签: c exec fork


【解决方案1】:

您提供的是 execl char** 而不是 char* ,因为您应该提供。 试试

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

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

char param1[64], param[64];

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

【讨论】:

  • 对不起这个操作导致***堆栈粉碎检测到***:padre.x终止
  • @AlexandrosAléksoTodeschini 您的参数变量的空间正好为 0 个字符,但您在其中写入的不仅仅是这些。应用 V_Maenolis 的建议,即实际给它们一些大小,因为如果不这样做,您将超出堆栈(如您的错误所示)。
  • 我的错!! execl("processore.x","processore.x",param,param1,(char *)0);
  • 好的,那么它在哪里崩溃了?错误显示哪一行/检查核心文件时会发生什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-17
  • 2015-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多