Это моя первая программа на Си. Привет, мир! Я уверен, что в наши дни это не проблема для старшеклассников, но у них не было программирования, когда я учился в старшей школе. :)
Я хочу писать в последовательный порт, пока строка, которую я пишу, не вернется ко мне. Затем займитесь другими делами. Мой код ниже запускается в течение нескольких секунд, а затем утверждает, что видит строку и заканчивается, даже если он не мог фактически увидеть строку. Он ведет себя одинаково, несмотря ни на что, у меня явно что-то не так.
Да, последовательное устройство / dev / kittens реально, и с терминала строки, отображаемые bash в / dev / kittens, принимаются (отражаются) на последовательном порту, когда порт зациклен.
Я был бы очень признателен каждому, кто исправит мои ошибки.
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <termios.h>
int fd;
char *buff;
int open_port(void)
{
fd = open("/dev/kitens", O_RDWR | O_NOCTTY | O_NDELAY);
if (fd == -1)
{
perror("open_port: Unable to open /dev/kittens ");
}
else
fcntl(fd, F_SETFL, 0);
return (fd);
}
int main()
{
int wr,rd;
open_port();
char msg[]="There are mice in the wire.\r";
do
{
/* Read from the port */
fcntl(fd, F_SETFL, FNDELAY);
rd=read(fd,buff,sizeof(msg));
/* Write to the port */
wr = write(fd, msg, sizeof(msg));
printf("debugging - Wrote to port\n");
usleep(10000);
if (wr < 0) {
fputs("write() to port /dev/kittens failed!\n", stderr);
break;
}
} while (buff != msg);
if (buff=msg)
printf(buff, "String Found! Now do the work.");
/*
system("dostuff.sh);
*/
/* Close the port on exit. */
close(fd);
return 0;
}