用未初始化的值未定义的行为调用`wait`?

时间:2018-03-20 21:44:08

标签: c undefined-behavior

int number;

// In some process

wait(&number);

我正在对进程进行等待调用,并想知道这是否安全,还是会得到未定义的行为?

2 个答案:

答案 0 :(得分:2)

这是安全的,因为您将变量的地址传递给函数。虽然number未初始化,但其地址具有明确定义的值。因此,该函数可以安全地获取该地址,取消引用它,并在那里写入一个值,这正是wait所做的。

man page for wait州:

pid_t wait(int *status);
     

...

     

如果status不为NULL,则wait()和waitpid()存储状态信息   在          它指向的int。

如果您在写入之前读取 {/ 1}}的值,并且仅当存储的值是陷阱表示(即不存在)时,您将只有未定义的行为代表一个“真正的”价值。)

答案 1 :(得分:1)

如果@app.route('/upload_something/', methods=['GET', 'POST']) def upload_something(): # a line to produce filename variable or to get it back from HTML is needed here if request.method == 'POST': # your upload starts here. return render_template('file_upload.html', file_name = file_name) 表示等待分叉进程退出的系统调用wait,则可以安全地执行此操作。 wait可以取消初始化,因为number会将状态存储在该变量中。

如果您正在讨论另一个wait函数,那么在没有查看该wait函数的源代码的情况下,我无法告诉您。