您好我需要构建一个像代理一样的 IO 服务器。
Web 服务器与服务器(代理)对话以发出请求,例如可以控制哪些设备。例如。嵌入式系统.. 通过 rs232 或 USB 和以太网连接到服务器。
例如,网络服务器与设备 A 对话并要求执行 X。
服务器(代理)也与设备对话。当设备启动时,它会将自己注册到代理。我是设备 b,我的名字是 k,我准备好接受命令了。
我正在使用 debian linux,我需要知道如何才能使用它。
这需要创建内核设备吗?
非常感谢。
编辑:我刚刚在http://www.netzmafia.de/skripten/unix/linux-daemon-howto.html阅读了有关守护程序编程的信息。我在这里复制并粘贴了代码。
我写下了我将更改代码的哪一部分的评论。
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>
#include <syslog.h>
#include <string.h>
int main(void) { // change this to "int main(int argc,char *argv[])"
/* Our process ID and Session ID */
pid_t pid, sid;
/* Fork off the parent process */
pid = fork();
if (pid < 0) {
exit(EXIT_FAILURE);
}
/* If we got a good PID, then
we can exit the parent process. */
if (pid > 0) {
exit(EXIT_SUCCESS);
}
/* Change the file mode mask */
umask(0);
/* Open any logs here */
/* Create a new SID for the child process */
sid = setsid();
if (sid < 0) {
/* Log the failure */
exit(EXIT_FAILURE);
}
/* Change the current working directory */
if ((chdir("/")) < 0) {
/* Log the failure */
exit(EXIT_FAILURE);
}
/* Close out the standard file descriptors */
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);
/* Daemon-specific initialization goes here */
/* The Big Loop */
while (1) {
/* Do some task here ... */ // Device detect here. eg(/dev/ttyS0-usb-serial)
sleep(30); /* wait 30 seconds */ // Instead of using 30 seconds here I plan on removing it and changing it with events like wake up when new device is plugged.
}
exit(EXIT_SUCCESS);
}
这段代码
int main(void)
改成这个
int main(int argc,char *argv[])
所以我可以从 debian 的命令行发送命令。
我将在 while 循环中添加这段代码 - 大循环
if(strcmp(argv[1], "status")==0){
//check status of devices here
}
if(new Device plugged){ // not real code. just to get the idea.
// register the device type and name.
}
然后在 php.ini 中使用 shell_exec()。
<?php $output = shell_exec('daemon status'); echo "$output"; die;
php 中的示例输出将是这样的:
Device Name | Status
/dev/ttyS0 = online
/dev/sample = offline
我想的可行吗?