Senden / Empfangen mit Select-Funktion

BF0911

Grünschnabel
Hallo,

ich bräuchte mal euere Hilfe.
Und zwar hab ich jetzt 2 Programme geschrieben, das eine kann die serielle Schnittstelle lesen (Read-Funktion mit select) und das andere kann auf die serielle Schnittstelle schreiben.
Nun möchte ich aus beiden Programmen eins machen, also das lesen und schreiben kann.

Das ist die Write-Funktion, noch ohne Abbruchbedingung usw.:

Code:
while (1) {
		p[i] = getch();
		printf("%c\n", p[i]);

			if (i==9){
				printf("betrete If-Schleife\n");
				printf("%s",p);
				n = write(tmpfd,p,sizeof(p));
				for (j=0;j<=i;j++) {

				}
				i=0;
			}
			else {
			printf("Beginn der Else-Anweisung\n");
			printf("aktuelles Element %c\n", p[i]);
			i++;

		}
		}

Und das ist ein Ausschnitt aus der Read-Funktion:

Code:
/* Initialize the input set */
	FD_ZERO(&input);
	FD_SET(fd, &input);
	FD_SET(fn, &input);

	max_fd = (fn > fd ? fn : fd) + 1;

	/* Initialize the timeout structure */
	timeout.tv_sec = 10;
	timeout.tv_usec = 0;

	/* Do the select */
	n = select(max_fd, &input, NULL, NULL, &timeout);

	/* See if there was an error */
	if (n < 0)
		perror("select failed");
	else if (n == 0)
		puts("TIMEOUT");
	else {
		/* We have input */
		if (FD_ISSET(fd, &input)) {
			while (1) {
				rd = read(fd, buf, sizeof(buf));
				printf("%s\n", buf);
			}
		}
		if (FD_ISSET(fn, &input)) {
			while (1) {
				rn = read(fn, buf, sizeof(buf));
				printf("%s\n", buf);
			}
		}

	}
	return 0;
}

Wie geh ich nun am besten vor?
Die Write-Funktion einfach "rüberkopieren" klappt nicht.
Im Internet finde ich leider auch nicht wirklich irgendein Beispiel-Code, wie sowas realisiert wird.
Man merkt das ich kein C-Experte bin.
 
Zuletzt bearbeitet:
Du kannst in deinem Hauptprogramm 2 Threads starten.
Den einen zum schreiben und der andere zum lesen.
Falls du nicht lesen und schreiben gleichzeitig machen kannst, musst du halt die Threads gegeneinander "verriegeln".

gruß
 
Threads sind eigentlich relativ einfach:

Code:
#include <windows.h>

DWORD WINAPI Thread(LPVOID);
HANDLE hThread;
DWORD ThreadID = 1;

int main()
{
    hThread = CreateThread(0,  //Thread starten
                           0,
                           Thread,
                           0,
                           0,
                           &ThreadID);
}

DWORD WINAPI DateikopierenThread(LPVOID param)  //Datei kopieren-Thread
{
    //Hier kommt der Programmcode rein, der abgearbeitet werden soll...
    
    return 0;  //Beendet den Thread wieder
}

Ich hab noch ne PDF-Datei angehängt wo alles über die Threads drin steht.
Mir hat es sehr geholfen, ansonsten bisschen drüber googlen...
Viel Spaß damit...

gruß
 

Anhänge

Zurück