gpt4 book ai didi

c - 在 SIGALRM 处理程序中打印

转载 作者:行者123 更新时间:2023-12-01 16:20:01 27 4
gpt4 key购买 nike

在处理类的系统调用时,我遇到了以下代码的麻烦。无论出于何种原因,当信号处理程序中的 print 语句末尾有换行符时,它会按预期运行,接收和处理信号并显示消息。但是,当换行符不存在时,根本不会显示任何输出。

我不知道为什么会出现这种情况,并希望有人能够阐明这个问题。

此外,当它打印某些内容时,信号似乎只发送了四次?这段代码有各种各样奇怪的事情。

#include <unistd.h>
#include <stdio.h>
#include <signal.h>

void alarm_handler(int signo) {
printf("pid : %d\n", getpid());
}

int main(int argc, char* argv[]) {
pid_t pid;
signal(SIGALRM, alarm_handler);

pid = fork();

if(pid == 0)
while(1) { }
else
{
int i;
for(i = 0; i < 5; i++)
{
sleep(1);
kill(pid, SIGALRM);
}
kill(pid, SIGKILL);
}
}

GCC版本信息

gcc -v
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer//usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 6.0 (clang-600.0.56) (based on LLVM 3.5svn)
Target: x86_64-apple-darwin14.0.0
Thread model: posix

最佳答案

如果您出于某种原因想要显示没有行尾的打印内容,那么执行 fflush(stdout); 很可能会有所帮助,因为 stdout 会被缓冲,并且通常会在行尾刷新。

关于c - 在 SIGALRM 处理程序中打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28135657/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com