1. ホーム
  2. c

[解決済み] write() return errno 14 why?

2022-02-16 14:12:56

質問

私は unsigned int DataBAR を送信したい。 char をシリアルポートに送信してください。

私のコードは

unsigned char Printer_buffer[PRN_BUFFER_SIZE];  
unsigned int DataBAR, DataD, DataT;

for (i = 0; i < 8; i++) {
  SumaN = SumaN + (Printer_buffer[i] & 0x0F);
  DataBAR = (Printer_buffer[i] & 0x0F) + 0x30;
  nbytes = write(fd,DataBAR ,1); //want to send to the serial port 
  printf("write error  code is %d !!!!!!!!!\n", errno);
  if (nbytes != 1) {
    printf("error writing on serial port!!!\n");
  }
  sleep(1);
  SumaP = SumaP + ((Printer_buffer[i] >> 4) & 0x0F);
  DataBAR = ((Printer_buffer[i] >> 4) & 0x0F) + 0x30;
  nbytes = write(fd, DataBAR, 1);
  printf("write error  code is %d !!!!!!!!!\n", errno);
  if (nbytes != 1) {
    printf("error writing on serial port!!!\n");
  }
  sleep(1);
}

write リターン errno=14 この問題を解決するにはどうしたらよいでしょうか?

C言語でpic18fを使用して、私はこのコードを使用し、それは動作しています。

for (i=0;i<8;i++){
  SumaN=SumaN+(Printer_buffer[i] & 0x0F);
  DataBAR=(Printer_buffer[i] & 0x0F) + 0x30;
  while(BusyUART1());
  putcUART1(DataBAR);               
  SumaP=SumaP+((Printer_buffer[i]>>4) & 0x0F);
  DataBAR=((Printer_buffer[i]>>4) & 0x0F) + 0x30;
  while(BusyUART1());
  putcUART1(DataBAR);               
}

私は今この中にいます、そしてあなたの助けに感謝します!!!

解決方法は?

write()int write( int fd, void *buf, int n ) ということで、2番目のパラメータに整数を渡してはいけません。おそらく unistd.h そうでなければ、あなたのコードはコンパイルさえできないはずです。代わりに マニュアルページ を呼び出し

write( fd, &DataBAR, 1 )

ただし、この方法で最上位バイトを書き込むか最下位バイトを書き込むかは、システムのエンディアンに依存することに注意してください。それよりも DataBAR をcharとする(または値をcharの c を使用し &cwrite() )