Ich habe ein Problem in meinem Programm. Ich lese von stdin in endless loop es funktioniert gut, aber wenn ich mehr als 4096 Zeichen in stdin es fängt an, schlecht zu handeln ich nicht wirklich warum. ist getc begrenzt? Ich gebe ich Ihnen hier Eingang und Ausgang dor setzen ilustrationFehler, wenn getc liest mehr als 4096 Zeichen
#define NFDS 1
#define h_addr h_addr_list[0]
#define BUFFER_LEN 4096
void *sending(void *arguments)
{
struct arg_struct *args = arguments;
int i = 0, j = 1;
if(signal(SIGINT, receive_signal) == SIG_ERR) {
fprintf(stderr, "Error setting signal handler for SIGINT.\n");
}
fd_set myset;
struct timeval tim;
int result;
int data_cap = 4096;
while(running)
{
tim.tv_sec = 0;
tim.tv_usec = 500;
FD_ZERO(&myset);
FD_SET(STDIN_FILENO, &myset);
result = select(STDIN_FILENO + 1, &myset, NULL, NULL, &tim);
if(result != 0)
{
str = calloc(data_cap,sizeof(char));
while((c = getc(stdin)) != '\n')
{
if (j >= data_cap)
{
str = realloc(str,sizeof(char) * data_cap * 2);
data_cap = data_cap * 2;
}
str[i] = c;
i++;
j++;
}
if (j >= data_cap)
{
str = realloc(str,sizeof(char) * data_cap * 2);
}
str[i] = '\0';
if(strlen(str)!=0)
{
bufferIn = message(args->arg2,str);
if(send(args->arg1,bufferIn,strlen(bufferIn),0) < 0)
{
callError("ERROR: cannot send socked");
}
free(bufferIn);
}
free(str); i = 0; j = 1; data_cap = 4096;
}
}
return NULL;
}
//in main threads
struct arg_struct args;
args.arg1 = client_socket;
args.arg2 = username;
pthread_t t22;
pthread_t t11;
pthread_create(&t22, NULL, &sends, (void *)&args);
pthread_create(&t11, NULL, &reci, (void *)&args);
pthread_join(t22, NULL);
pthread_cancel(t22);
pthread_join(t11, NULL);
pthread_cancel(t11);
Eingang zum Beispiel: AAAAAAAA ..... aaaaaaaaa DIES IST DAS WORT
lässt sich vorstellen, dass es 4096 ‚a‘ Zeichen in einer Sequenz von der ersten ‚a‘ ‚a‘ zu halten, aber wenn ich drucken, was ich von stdin bekam ich dieses:
dIES DER AAAAAAA WORD IST ...... AAAAAAA dIES IST dAS WORT
was es ist wirklich zuerst, es liest alle Zeichen f orm 4096. char. In diesem Beispiel ist es "DIESES IST DAS WORT" und druckt es zuerst. Dann druckt es wirklich, was es an erster Stelle drucken soll.
zwischen allen Zeichen in keinem Ende der Zeile Symbol zunächst dachte ich, dass es etwas Schlechtes mit Speicherzuweisung ist, weil ich Mamory bei 4096 Bytes zuordnen, aber es gibt nicht. Ich habe es getestet. Thak Sie für jede Hilfe Entschuldigung für schlecht Englisch
Gibt es etwas falsch mit Ihrem spacebar? Die Einrückung ist überall –
Es gibt ein oben definiertes Makro mit der Bezeichnung 'BUFFER_LEN' welches einen Wert von 4096 hat. Dies wird verwendet, um ein Char-Array der Größe 4096 zu definieren. Könnten Sie überlaufen? –
Könnten Sie bitte nur die relevanten Teile des Codes zeigen? Es ist schwer, so viel Code zu lesen, wenn das eigentliche Problem in einem viel kleineren Codeblock liegt. – dasblinkenlight