Нам было присвоено задание, которое будет выполняться в двух командах от терминала и перенести первое на второе. Я считаю, что структура кода правильная, однако при попытке скомпилировать ее жалуется, что мой начальный символ char * cmd не является допустимым. Почему это происходит? Я смущен, любая помощь будет оценена.C Character Array Pointer не является корректным заявлением
Код:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void main(int argc, char *argv[])
{
int f_des[2];
if(pipe(f_des) == -1)
{
perror("pipe");
exit(1);
}
switch(fork())
{
case -1: perror("fork");
exit(2);
case 0: dup2(f_des[1], fileno(stdout));
close(f_des[0]);
close(f_des[1]);
char *cmd[] = {"/usr/bin/"+argv[1],argv[1], (char *)0};
char *path[] = {"HOME=/usr/home/", "LOGNAME=home", (char *)0};
int ret;
ret = execvp(cmd,path);
exit(3);
case default: dup2(f_des[0], fileno(stdin));
close(f_des[0]);
close(f_des[1]);
char *cmd[] = {"/usr/bin/"+argv[2], argv[2], (char *)0};
char *path[] = {"HOME=/usr/home/", "LOGNAME=home", (char *)0};
int ret;
ret = execvp(cmd,path);
exit(4);
}
}
Ошибка:
cc: Error: lab1.c, line 22: Invalid statement.
char *cmd[] = {"/usr/bin/"+argv[1],argv[1], (char *)0};
^
cc: Error: lab1.c, line 22: Missing ";".
char *cmd[] = {"/usr/bin/"+argv[1],argv[1], (char *)0};
-----------------------------------------------------^
cc: Error: lab1.c, line 23: Invalid statement.
char *path[] = {"HOME=/usr/home/", "LOGNAME=home", (char *)0};
^
cc: Error: lab1.c, line 23: Missing ";".
char *path[] = {"HOME=/usr/home/", "LOGNAME=home", (char *)0};
------------------------------------------------------------^
cc: Error: lab1.c, line 24: Invalid statement.
int ret;
^
cc: Error: lab1.c, line 27: Invalid expression.
case default: dup2(f_des[0], fileno(stdin));
-----^
cc: Error: lab1.c, line 30: Invalid statement.
char *cmd[] = {"/usr/bin/"+argv[2], argv[2], (char *)0};
^
cc: Error: lab1.c, line 30: Missing ";".
char *cmd[] = {"/usr/bin/"+argv[2], argv[2], (char *)0};
------------------------------------------------------^
cc: Error: lab1.c, line 31: Invalid statement.
char *path[] = {"HOME=/usr/home/", "LOGNAME=home", (char *)0};
^
cc: Error: lab1.c, line 31: Missing ";".
char *path[] = {"HOME=/usr/home/", "LOGNAME=home", (char *)0};
------------------------------------------------------------^
cc: Error: lab1.c, line 32: Invalid statement.
int ret;
^
cc: Error: lab1.c, line 25: In this statement, "ret" is not declared.
ret = execvp(cmd,path);
^
cc: Error: lab1.c, line 25: In this statement, "cmd" is not declared.
ret = execvp(cmd,path);
-------------^
cc: Error: lab1.c, line 25: In this statement, "path" is not declared.
ret = execvp(cmd,path);
-----------------^
Вы не можете добавить две строки с '+' like '"/usr/bin/"+ argv [1]'. Не составляйте синтаксис только потому, что вы можете сделать это на других языках. –
И похоже, что вы компилируете C89. И это 'default:', а не 'case default:'. – mafso
@YuHao, Спасибо за уведомление, как бы вы предложили сделать это? strcat? – Kyle