Я реализую простой протокол для передачи файлов между двумя ПК через последовательный порт, и я получаю странную ошибку.
На главной я вызываю функцию "llopen":
int
llopen(int port, int type) {
int fd = 0;
char* PORT;
PORT = malloc( sizeof(char) * (strlen(COM) + 1) );
sprintf(PORT,"%s%d",COM,port);
fd = initialization(PORT); // Open(...): returns a file descriptor!
switch(type) {
case SENDER:
return connectSender(fd);
break;
case RECEIVER:
return connectReceiver(fd);
break;
}
return fd; // The fd value here is 5
}
После этого я вызываю функцию llwrite (int fd, ...) , чтобы записать строку в дескриптор файла, но я получаю сообщение об ошибке: «Bad file descriptor» на llwrite (int fd, ...) . Если я снова вызываю функцию initialization (port) , до этого она работает и записывает N байтов в дескриптор файла, но если я этого не делаю, это выдает ошибку «Bad file descriptor» еще раз.
Вот это llwrite (int fd, ...) функция:
int
llwrite(int fileDescriptor, unsigned char* buffer, unsigned int length) {
// The fd value here is 5
return writeBuffer(fileDescriptor,buffer,length);
}
Даже перед оператором return , если я, например, вызываю функцию tcflush (...) , я получаю ошибку "Bad file descriptor".
Есть подсказка? Заранее спасибо!
EDIT:
Проблема решена.
llopen (...) был неправ. Я возвращал количество байтов, записанных на ConnectReceiver (...) / ConnectSender (...) , а не дескриптор файла
Теперь все правильно:
int
llopen(int port, int type) {
int fd = 0;
char* PORT;
PORT = malloc( sizeof(char) * (strlen(COM) + 1) );
sprintf(PORT,"%s%d",COM,port);
fd = initialization(PORT); // Open(...): returns a file descriptor!
switch(type) {
case SENDER:
if( connectSender(fd) > 0 ) return fd;
case RECEIVER:
if( connectReceiver(fd) > 0 ) return fd;
}
return -1;
}