Я должен написать (очень базовую) оболочку для linux для школы. В настоящее время я только пытаюсь выполнить программу с ним (через fork и execv), и только планирую добавить пользовательский ввод позже. Я начал писать на C (который я вообще не знаю / знаю только некоторые части, которые он разделяет с C ++), потому что слайды использовали его, но мы можем использовать либо C, либо C ++, и я планировал использовать C ++, как только я узнал, как C обрабатывает / не обрабатывает ввод / вывод / строки. (Я взял части кода (в основном это строки, в которых используются status, fork, execv и wait) из слайдов профессора и сам добавил его части.)
Однако в настоящее время при использовании C программа компилируется, запускается и, кажется, показывает ожидаемый результат (вывод «testdesecho» путем вызова функции echo). Но когда я копирую тот же код в C ++ и пытаюсь скомпилировать его, я получаю несколько ошибок (не только предупреждений) и поэтому не могу даже скомпилировать код.
Это код
//#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include <limits.h>
#include <string.h>
#include <stdlib.h>
//#include <unistd.h>
/*
readparsefunc() {
}
*/
int main() {
int childPid;
int status;
char befehlstr[20] = "/bin/echo"; //location
char* parameterstr[61] = { "echo", "testdesecho" }; //argv
childPid = fork();
//befehlstr = "";
//parameterstr = " ";
//cout << parameterstr[1];
printf("%d", childPid); printf("<- childPid(test) \n");
printf(befehlstr); printf("<- befehlstr(test) \n");
printf(*parameterstr); printf("<- parameterstr(test) \n");
if (childPid == -1) { printf("Konnte keinen neuen Prozess erstellen"); }
else if (childPid == 0) {
printf("child process \n");
int testintueberlagerung = 0;
testintueberlagerung = execv(befehlstr, parameterstr);
if (testintueberlagerung != 0) {
printf("%d" "<- testueberlagerungswert \n", testintueberlagerung);
}
//execv(befehlstr, parameterstr);
exit(0);
}
else if (childPid > 0) {
printf("parent process \n");
wait(&status);
printf("parent process beendet sich nun auch \n");
}
/*
while (1 != 0) {
}
*/
return 0;
}
И это ошибки:
testmitcanders.cpp:27:13: error: ‘fork’ was not declared in this scope
childPid = fork();
^~~~
testmitcanders.cpp:41:26: error: ‘execv’ was not declared in this scope
testintueberlagerung = execv(befehlstr, parameterstr);
^~~~~
testmitcanders.cpp:51:3: error: ‘wait’ was not declared in this scope
wait(&status);
^~~~
testmitcanders.cpp:51:3: note: suggested alternative: ‘main’
wait(&status);
^~~~
main
Насколько я понимаю, все они относятся к системным вызовам, и я не понимаю, почему они должны быть объявлены в C ++. а не в С?
(А как их объявить, если надо?)
Спасибо за любую помощь