Dan*_*ler 0 c fork header include-guards execvp
即使有警卫人员到位,我的文件仍在尝试两次执行mkdir。
我尝试将ifndef放在另一个c文件中,但仍执行两次
酸碱度
#ifndef P_H
#define P_H
void p1(char* filepath, int m);
#endif
Run Code Online (Sandbox Code Playgroud)
main.c
#include "main.h"// includes ifndef with p1.h inside it
int main(int argc, char *argv[]){
p1("Hi",2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
第1版
#include "phase1.h"
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdio.h>
void p1(char* filepath, int m){
pid_t cpid;
cpid = fork();
if ((cpid = fork()) == -1) {
perror("fork failed");
}
if(cpid > 0){
wait(NULL);
}
else{
char *makeDir[] = {"mkdir", "MyNewDirectory", NULL};
execvp(makeDir[0],makeDir);
}
}
Run Code Online (Sandbox Code Playgroud)
当我执行gcc -o p1test main.c p1.c和./p1test时,出现以下错误:mkdir:无法创建目录“ MyNewDirectory”:文件存在。”显然,它正在建立目录,但随后尝试使难道不是应该防止这些多次执行的防护措施吗?这与派生有关系吗?这是第一次尝试使用自定义头文件。在此先感谢,如果已经在某些地方回答过,请让我知道,我将删除它。
您两次调用fork(),因此有4个不同的进程在运行。两个孩子都试图创建目录。您只需要调用一次fork():
cpid = fork();
if (cpid == -1) {
perror("fork failed");
}
Run Code Online (Sandbox Code Playgroud)
标头保护罩是正确的,与您的问题无关。它们仅在编译时使用,以确保您的头文件仅包含一次。
| 归档时间: |
|
| 查看次数: |
39 次 |
| 最近记录: |