我和这个实验室一起学习了一个关于计算机安全的Udemy课程,该课程主要使用C(我认为)脚本进行演示。在尝试在我自己的计算机上运行以下程序(在Ubuntu和MacOS环境中)之后,我得到了太多的错误,以至于编译器似乎甚至不知道它在读取哪种语言。
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
extern char **environ;
void printenv()
{
int i = 0;
while (environ[i] != NULL) {
printf("%s\n", environ[i]);
i++;
}
}
void main()
{
pid_t childPid;
switch(childPid = fork()) {
case 0: /* child process */
printenv();
exit(0);
default: /* parent process */
//printenv();
exit(0);
}
}错误:
第4行: extern:未找到命令 第5行:意外令牌附近的语法错误 第5行:“()”
有人知道这是怎么回事吗?我不熟悉C(主要使用Javascript和Python),但似乎所有东西都是非常标准的语法,不应该出错。
发布于 2020-06-19 06:31:58
下列拟议守则:
注意:我在linux上编译了以下内容:
gcc -O1 -ggdb -Wall -Wextra -Wconversion -pedantic -c "untitled2.c" -I. 注:我将其链接到:
gcc -ggdb -Wall -o "untitled2" "untitled2.o"但是,fork()可能会失败,在这种情况下,它返回-1,所以代码应该有一个
case -1:
perror( "fork failed" );
break;现在,拟议的守则:
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
extern char **environ;
void printenv()
{
int i = 0;
while (environ[i] != NULL) {
printf("%s\n", environ[i]);
i++;
}
}
int main( void )
{
pid_t childPid;
switch(childPid = fork())
{
case 0: /* child process */
printenv();
exit(0);
default: /* parent process */
//printenv();
waitpid( childPid, NULL, 0);
exit(0);
}
}https://stackoverflow.com/questions/62459285
复制相似问题