Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C/C++ Сетевое программирование
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.06.2011, 01:44   #1
alter_man
Новичок
Джуниор
 
Регистрация: 28.06.2011
Сообщений: 2
По умолчанию Serial, centOS. gcc

Добрый вечер, господа.
Уже почти все перепробовал, не выходит каменный цветок.
Задача - получить данные на read, которые отправились на write.
Код:
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <stdio.h>
#include <stdlib.h>
#include <termios.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/signal.h>
#include <sys/types.h>
#include <sys/poll.h>
#include <errno.h>

int fd;

int main(void)
{
	unsigned char send_bytes[] = {'H','e','l','l','o'};
	char buffer[255];
	int ret;
	int k;

        struct termios oldtio,newtio;

        fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY| O_NONBLOCK);
        if (fd <0) { printf("error opening port"); return(-1);}

        fcntl(fd, F_SETOWN, getpid());
	fcntl(fd, F_SETFL, 0);


        tcgetattr(fd,&oldtio); /* save current port settings */

	newtio.c_ispeed = B9600;
	newtio.c_ospeed = B9600;
        newtio.c_cflag = (CS8 | CLOCAL | CREAD | CRTSCTS);
        newtio.c_iflag = (IGNPAR | ICRNL);
        newtio.c_oflag = OPOST;
        newtio.c_lflag = (ICANON|ECHO|ECHOE|ISIG);
        newtio.c_cc[VMIN]=1;
        newtio.c_cc[VTIME]=10;
        tcflush(fd, TCIFLUSH);
        tcsetattr(fd,TCSANOW,&newtio);

	struct pollfd poll_fd[1];
	k = poll(poll_fd, 1, 100);
	poll_fd[0].fd = fd;
	poll_fd[0].events = POLLIN;
	poll_fd[0].revents = POLLIN;
	int n_write = write(fd, send_bytes, sizeof(send_bytes));  //Send data
	printf("Wrote the bytes. \n");
	sleep(5);
	if((poll_fd[0].revents & POLLIN) !=0)
{
	int n_read=read(fd,buffer,sizeof(buffer));
	if (n_read == -1)
		printf("Error read %s\n", strerror(errno));

	printf("read %d bytes. \n", n_read);
}

printf(buffer); 

	return 0;

}
Либо при флаге FNDELAY возвращает -1 и port temporarily unavaible, либо зависает на чтении...
alter_man вне форума Ответить с цитированием
Старый 28.06.2011, 01:48   #2
alter_man
Новичок
Джуниор
 
Регистрация: 28.06.2011
Сообщений: 2
По умолчанию

Использую заглушку на com port, перепробовал и канонический ввод/вывод и raw mode... В этой теме не так давно, вроде бы по коду все похоже на правду, а не выходит ничего
alter_man вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
VPS (CentOS) .mastervan Операционные системы общие вопросы 1 07.08.2010 22:54
Где можно скачать CentOS HellMercenariess Linux (Ubuntu, Debian, Red Hat, CentOS, Mint) 1 10.12.2009 13:58
centos установка ImageMagik6 Mobile™ Linux (Ubuntu, Debian, Red Hat, CentOS, Mint) 2 05.11.2009 20:45
USB-to-Serial Com-порт gozzt Компоненты Delphi 0 13.05.2009 21:08
Serial Key L.Morgan Общие вопросы Delphi 8 14.04.2009 18:05