【发布时间】:2010-11-30 12:44:54
【问题描述】:
我通过命名管道接收这种格式的命令:
GETIP <machine_name> \n
<process_id>
GETNAME<ip_address> \n
<process_id>
UDATA <machine_name> <ip_address>
<process_id>
DDATA <machine_name> \n
<process_id>
因此,从管道中读取的示例字符串是:
GETIP lolcatzmachine
1235
UDATA cheezburger 127.0.0.1
7564
说实话,我不知道我到底在做什么,我不熟悉 c 标记。如何更改我的代码以满足要求?
char *token;
char *commandName [10];
char machineName[200];
char ip[40];
char pid[30];
char * separator = " ";
char *brkt; // reentrant pointer, as this tokenizing will be multithreaded
for ( ; ; ) {
token=strtok_r(command_and_pid, separator, &brkt); //strtok_r is needed for multithreading
commandName = strdup(token);
//ip=strtok_r(NULL, separator, &brkt);
//pid=strtok_r(NULL, separator, &brkt);
if (token == NULL)
break;
}
【问题讨论】:
-
注意,当你tokeinzing字符串时,字符串指针应该只在第一个
strtok()调用中,直到字符串结尾的所有后续调用都应该将0(NULL)作为第一个参数。 -
那我怎样才能打破分词循环呢?