我正在用C (linux)编写一个多线程服务器应用程序,它必须侦听2个不同的端口号,例如侦听端口号3000和4000,以便不同的客户端连接到它来服务不同的功能(实际功能由工作线程执行,主线程无限运行,并在新连接时产生新的工作线程)。我不确定select在这里是否可以工作,因为我们可以有多个套接字连接,但所有连接都与相同的端口号相关联。我尝试了顺序绑定到sock_1和sock_2,当我运行client_1时,一切都正常工作。但是,当我运行client_2时,我在客户端的connect()上得到一个错误。如果select()可以在这里使用,请告诉我怎么做。任何帮助都非常感谢!谢谢!
(P.S so
我不能在具有共享内存的进程之间共享指向对象的指针。
我可以在不同的过程中成功地共享如下结构:
// Data to be shared among processes
struct Shared_data {
int setPointCounter;
struct Point old_point;
pthread_mutex_t my_mutex;
} *shd;
该结构被声明为全局结构(它位于main()之前,比方说)。
我将共享内存初始化为主内存:
shd = (struct Shared_data *) (mmap(
我知道,如果我试图打印一个数组元素的地址,它将是一个来自虚拟内存的地址,而不是来自真实内存(物理内存),即DRAM的地址。
printf ("Address of A[5] and A[6] are %u and %u", &A[5], &A[6]);
我发现地址是连续的(假设元素是字符)。实际上,它们可能不是连续的,至少在DRAM中不是。我想知道真正的地址。我该怎么做呢?
无论是Windows还是Linux,我都需要知道这一点。
我刚刚编译了monit的最新版本(截至2017年9月)。它似乎可以正常工作,并将数据传送到我的mmonit服务器。
我使用的是Linux/centos2.6.32-042sta094.7 #1 SMP Wed Oct 22 12:43:21 MSK 2014 x86_64 GNU/Linux
然而,如果我只是想运行最基本的命令行参数,它们似乎都失败了,例如:
$ monit -V; monit status
This is Monit version 5.24.0
Built with ssl, with ipv6, with compression, with pam and with l
当我搜索“如果malloc和exit with not free会发生什么?”,我可以找到这样的答案:“今天,操作系统将在程序退出后恢复所有分配的内存空间”。
在这个答案中,“恢复”是什么意思?当进程退出时,OS只是删除它的PCB和页表,不是吗?操作系统是否需要执行其他任务才能完全终止进程?在进阶时谢谢。
对不起,我的英语不好。
ps。我的意思是OS Linux