我需要使用fork()和wait()函数来完成赋值.我们正在对非确定性行为进行建模,如果存在多个可能的转换,则需要fork()程序.
为了尝试解决fork和wait如何工作,我刚刚制作了一个简单的程序.我想现在我理解调用是如何工作的,并且如果程序只分支一次会很好,因为父进程可以使用单个子进程的退出状态来确定子进程是否达到接受状态.
从下面的代码中可以看出,我希望能够处理必须有多个子进程的情况.我的问题是你似乎只能使用_exit函数设置状态一次.因此,在我的示例中,父进程测试的退出状态显示第一个子进程在其退出状态时发出0,但没有关于第二个子进程的信息.
我试着简单地不是_exit() - 拒绝,但那个子进程会继续,实际上似乎有两个父进程.
对于华夫饼干感到抱歉,但如果有人能告诉我父进程如何获取有关多个子进程的状态信息,我将不胜感激,或者我很高兴父进程只能注意到来自子进程的接受状态,但在这种情况下,我将成功地需要退出具有拒绝状态的子进程.
我的测试代码如下:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/wait.h>
int main(void) {
pid_t child_pid, wpid, pid;
int status = 0;
int i;
int a[3] = {1, 2, 1};
for(i = 1; i < 3; i++) {
printf("i = %d\n", i);
pid = getpid();
printf("pid after i = %d\n", pid);
if((child_pid = fork()) == 0) {
printf("In child process\n");
pid = getpid();
printf("pid in child process is %d\n", pid);
/* Is a …
Run Code Online (Sandbox Code Playgroud) 运行 ac 程序后,在命令行上给它一些输入(该程序模拟下推自动机),我得到以下响应:
bash: A: 无法识别的历史修饰符
我用谷歌搜索过,但我找不到这到底是什么意思的解释。我的程序与其他测试输入一起工作,所以我认为这与输入有关,而不是与我的程序有关(笑)。
提前干杯
乔
我在使用strncpy和(指向结构) - >(成员)表示法时遇到分段错误:
我简化了我的代码.我初始化一个结构并将其所有标记设置为空字符串.然后声明一个指向结构的指针,并为其分配结构的地址.
我将指针传递给一个函数.我可以在函数的开头打印出结构的内容,但如果我尝试在strncpy函数中使用tp - > mnemonic,我会得到seg错误.谁能告诉我我做错了什么?
typedef struct tok {
char* label;
char* mnem;
char* operand;
}Tokens;
Tokens* tokenise(Tokens* tp, char* line) {
// This prints "load"
printf("Print this - %s\n", tp -> mnem);
// This function gives me segmentation fault
strncpy(tp -> mnem, line, 4);
return tp;
}
int main() {
char* line = "This is a line";
Tokens tokens;
tokens.label = "";
tokens.mnem = "load";
tokens.operand = "";
Tokens* tp = &tokens;
tp = tokenise(tp, line); …
Run Code Online (Sandbox Code Playgroud)