0
我试图制作一个服务器,它监听2个端口,并对传入数据做一些事情,同时每秒打印出一个点,让人们知道它仍在运行。我想通过使用fork()
来做到这一点。我想:C分叉不起作用
p = fork();
if(p == 0){
if(getsockname(sock1, (struct sockaddr *) &name1, &length1) == -1) {
perror("getting socket name");
exit(3);
}
printf("Socket port #%d\n", ntohs(name1.sin_port));
if(getsockname(sock2, (struct sockaddr *) &name2, &length2) == -1) {
perror("getting socket name");
exit(3);
}
printf("Socket port #%d\n", ntohs(name2.sin_port));
}
else if(p > 0){
printf("inhere"); //
p1 = fork();
if(p1 > 0) {
while(TRUE) {
write(".");
sleep(1);
}
}
...
这还不打印子进程inhere
字符串。我究竟做错了什么?
(p == 0)是一个子进程not(p> 0)。 –
在''inhere''末尾没有换行符,因此将其陷入标准库的输出行缓冲区中是我的第一个猜测。不知道为什么在那里有另一个'fork()'调用。 – unwind
根据我的'睡眠'的manpage,参数是睡眠秒数。睡眠(1000000000000000);'可能睡得比你想象的要长。 – Gerhardh