- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
#include<apue.h>
#include<signal.h>
static void charatatime(char *str)
{
char *ptr;
int c;
setbuf(stdout,NULL);
for (ptr = str;(c = *ptr++) != 0;)
putc(c,stdout);
}
int main(int argc , char *argv[])
{
pid_t pid;
int i;
TELL_WAIT();
if ((pid = fork()) < 0)
err_sys("fork error");
else if (pid == 0)
{
for (i = 0;i < 10;++i)
{
WAIT_PARENT();
charatatime("ouput from child\n");
}
exit(0);
}
else
{
for (i = 0;i < 10;++i)
{
charatatime("output from parent\n");
TELL_CHILD(pid);
}
}
return 0;
}
它只打印两次而没有任何循环就可以正常工作。但是当我尝试使用 for
循环打印更多次......我认为父进程应该在 TELL_CHILD(pid)
完成后等待子进程......
最佳答案
您的问题是,在写入后,父级不会等待子级接管。因此,您的代码仅确保子级在父级至少写入一次后才会写入。
我无法测试代码,因此请检查错误,但也许这样的东西会起作用:
#include<apue.h>
#include<signal.h>
static void charatatime(char *str)
{
char *ptr;
int c;
setbuf(stdout,NULL);
for (ptr = str;(c = *ptr++) != 0;)
putc(c,stdout);
}
int main(int argc , char *argv[])
{
pid_t pid;
int i;
TELL_WAIT();
if ((pid = fork()) < 0)
err_sys("fork error");
else if (pid == 0)
{
TELL_PARENT();
for (i = 0;i < 10;++i)
{
WAIT_PARENT();
charatatime("ouput from child\n");
TELL_PARENT();
}
exit(0);
}
else
{
for (i = 0;i < 10;++i)
{
WAIT_CHILD(pid);
charatatime("output from parent\n");
TELL_CHILD(pid);
}
}
return 0;
}
关于c - APUE :how to print something alternately in two process?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12623022/
main 函数与进程终止 众所周知,main 函数为 unix like 系统上可执行文件的"入口",然而这个入口并不是指链接器设置的程序起始地址,后者通常是一个启动例程,它
概览 开门见山先上图 界定一些术语,方便后面说明: GMT:格林威治平均时,太阳每天经过位于英国伦敦郊区的皇家格林威治天文台的时间为中午 12 点,
前言 Unix like 系统和 windows 的最大区别就是有一套标准的系统信息数据文件,一般存放在 /etc/ 目录下,并且提供了一组近似的接口访问和查询信息,这些基础设施让系统管理看起来
请帮我弄清楚以下代码片段有什么问题,它来自 APUE 第 8.6 节(W Richard Stevens,Stephen A Rago Advanced Programming in the Unix
在APUE section 8.3 fork function中,关于父子进程之间的文件共享, 它说:父子共享相同的文件偏移量很重要。 而在 8.9 节 Race Conditions 中,有一个例子
是否有可能构建一台具有 32GB RAM 的机器,并使用大约 28GB 的 OpenCL? 我当前的 APU 是 Athlon 5350,报告的“全局内存大小”为 2142658560。我使用 C
考虑 APUE 书中的以下示例: #include #include int initserver(int type, const struct sockaddr *addr,
sleep2的apue中的代码如下: #include #include #include #include static jmp_buf env_alrm; static void sig_
在图11.2 APUE 2nd中,有一段代码演示了threads API的用法,如下: #include #include pthread_t ntid; void printids(const
书中定义了3个自定义函数: int serv_listen(const char *name); //Returns: file descriptor to listen on if OK, nega
我正在尝试执行以下程序-在 APUE.3E -> filedir -> filetype.c 中(这是我下载 APUE.3E 时默认出现的。我没有进行任何更改) 但是当我编译时,这是我收到的错误: m
哪一个是正确的?1. pthread_mutex_lock ... pthread_cond_broadcast pthread_mutex_unlock 2. pthread_mutex_lock
我正在向APUE3e学习 #include "apue.h" #include int main(int argc, char *argv[]) { DIR *dp; struct
我看了《APUE》,我发现10.11的例子不能创建正确的答案。10.11 文件是: static void sig_quit( int ); int main( void ) { si
#include #include static void charatatime(char *str) { char *ptr; int c; setbuf(stdout,N
我正在学习 APUE 10.3 信号,只是混淆了 SIG_ERR、SIG_DFL 和 SIG_IGN 的定义。这是定义: #define SIG_ERR (void (*)())-1 #defin
是否可以在 A10-7800 上启用 OpenCL,而不将其用于 X 服务器?我有一个用于 GPGPU 编程的 Linux 机器。独立的 GEForce 740 卡用于 X 服务器和运行我开发的 Op
APUE 第 7 章说此代码段将退出,退出代码不是 0(示例中为 13)。但它在我的电脑上以代码 0 退出: #include main() { printf("hello, worl
在“Unix 环境高级编程”的示例中,以下示例程序创建一个文件,然后使用 lseek 将文件指针移动到更远的地址,从而在文件中放置一个“洞”。作者说中间的空格用“0”填充。我想看看那些“0”是否会打印
我有一台配备 AMD E-1800 APU 和 4GB RAM 的 TurboX 笔记本电脑,我将其用于开发目的,但 CPU 运行不佳,我在上面安装了 ubuntu 16.04 amd64。每当我在
我是一名优秀的程序员,十分优秀!