我有一堆printf()
s 可以正确打印我必须构建的非常复杂的字符串。
问题是我需要将该字符串存储在一个变量中(所有这些printf()
s 一起通过套接字发送它们的结果。我很确定我需要立即发送它们 - 但我会让一个小窗口如果你想说服我那不是真的,请打开。
实现这一目标的最佳方法是什么?
字符串长度确实是可变的。我听说过sprintf()
and realloc()
,甚至asprintf()
,但我不知道如何将所有这些混合在一起。
这是我当前的代码:
void mostrarVariable(char *variable, void *valor) {
printf("%s=%d\n", variable, *(int *)valor);
}
void mostrarEntradaStack(t_registro_stack *entradaStack) {
printf("%d,%s\n", entradaStack->retorno, entradaStack->nombre_funcion);
}
void suspender(t_pcb *pcb) {
char *mensaje = NULL;
mensaje = strdup("1Proceso suspendido...");
// FIXME: guardar los printf en una variable y enviarlo por la red
printf("----------------\n\n");
printf("ID=%d\n", pcb->id_proceso);
printf("PC=%d\n", pcb->program_counter);
printf("\n-- Estructura de codigo --\n");
int indice = 0;
// believe me: this iterates a char** printf-ing each line
while(pcb->codigo[indice] != NULL) {
printf("%s\n", pcb->codigo[indice++]);
}
printf("----------------\n");
printf("\n-- Estructuras de datos --\n");
// believe me: this calls mostrarVariable() for each entry in the pcb->datos dictionary
dictionary_iterator(pcb->datos, mostrarVariable);
printf("----------------\n\n");
printf("-- Estructura de Stack --\n");
// believe me: this calls mostrarEntradaStack() for each element in the stack without modifying it
pila_hacer(pcb->stack, mostrarEntradaStack);
printf("\n----------------\n");
// believe me: this sends "mensaje" via a socket ("pcb->id_proceso"), and it handles the partial send()s and all of that
// it has to be on one socket_send() to correctly send the message length to the other endpoint - the protocol pretty works
socket_send(pcb->id_proceso, mensaje, strlen(mensaje) + 1);
}
相信我,代码目前可以工作,但mensaje
只有值“1Proceso suspendido ...”,数据在本地打印,而不是发送到远程。
样本输出:
----------------
ID=4
PC=6
-- Estructura de codigo --
#!/home/desert69/workspaces/operativos/no-quiero/procer/pi/build/pi
# Comentario
variables a,b,c,d,e
comienzo_programa
a=1
b=2;3
c=a+b
d=c-3
f1()
f2()
e=a+c;2
imprimir a
imprimir b
imprimir c
imprimir d
imprimir e
fin_programa
comienzo_funcion f1
a=3
f3()
b=4
fin_funcion f1
comienzo_funcion f2
a=a+1
fin_funcion f2
comienzo_funcion f3
c=d
fin_funcion f3
----------------
-- Estructuras de datos --
c=159769736
d=159769776
a=159769600
b=159769696
e=159769816
----------------
-- Estructura de Stack --
----------------
对不起,西班牙语的代码,但我想确保它与我正在运行的完全相同。也许稍后(如果可以的话)我会尝试翻译它,但我不确定。即使很难,重要的是将every 替换printf()
为某些东西以将这些输出附加到mensaje
.
如果您需要任何进一步的信息,请随时发表评论。
谢谢。真的 :)