printf()
作成する必要のある非常に複雑な文字列を正しく出力するsがたくさんあります。
問題は、その文字列を変数に格納する必要があることです(printf()
ソケットを介して送信するために、これらすべての文字列をまとめた結果です。一度に送信する必要があると確信していますが、小さなウィンドウを表示しますあなたが私を説得したいのなら、それは真実ではありません。
それを達成するための最良の方法は何ですか?
文字列の長さは本当に可変です。sprintf()
と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 --
----------------
スペイン語のコードで申し訳ありませんが、私が実行しているものとまったく同じものであることを確認したかったのです。たぶん後で(できれば)私はそれを翻訳しようとしますが、よくわかりません。難しい場合でも、重要なことは、それらの出力をに追加するために、すべてprintf()
を何かmensaje
に置き換えることです。
さらに詳しい情報が必要な場合は、お気軽にコメントしてください。
ありがとう。本当に :)