相同的程序在C中工作,但在C++中不工作(使用linux系统调用)



我应该为学校编写一个(非常基本的(linux shell。目前,我只想用它来执行一个程序(通过fork和execv(,并且只计划稍后添加用户输入。我开始用C语言写作(我根本不知道/只知道它与C++共享的一些部分(,因为幻灯片使用了它,但我们可以使用C或C++,我计划在学习了C如何处理/不处理输入/输出/字符串后立即使用C++。(我从教授的幻灯片中提取了部分代码(主要是使用status、fork、execv和wait的行(,并自己添加了部分代码。(
然而,当前使用C时,程序会编译、运行并显示预期输出(通过调用echo函数打印出"testdesecho"(。但是,当将相同的代码复制粘贴到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++中声明。但不是在C?(如果必须的话,如何申报?(

感谢的帮助

早期版本的C(大多数编译器默认情况下仍然支持(具有未声明函数的默认类型的概念。如果在声明函数之前使用了该函数,则C假定该函数的类型为int (*)(),即接受未知数量的参数并返回int的函数。所讨论的函数的实际类型或多或少与该定义兼容,因此它似乎可以工作。

另一方面,C++没有未声明函数的默认类型,因此当使用未声明的函数时,它会立即抛出错误。

对于forkexec函数,需要#include <unistd.h>;对于wait,需要#include <sys/types.h>#include <sys/wait.h>

相关内容

  • 没有找到相关文章