[問題] Linux C開啟串列埠失敗..

看板C_and_CPP (C/C++)作者 (超越自己)時間13年前 (2013/03/26 13:11), 編輯推噓1(102)
留言3則, 2人參與, 最新討論串1/1
各位板友們好, 小弟目前是在用Linux來寫程式, 不過在打開串列埠卻遇上困難... 執行環境:在PC上使用VMware安裝Ubuntu 10.04LTS, 是採用USB轉RS232的線來短路其2、3腳(傳送及接收) 而查詢到此通訊埠為/dev/ttyUSB0, 以下的程式由範例書本所截錄(原本此程式編譯環境是Windows) 不過在Linux編譯執行時卻卡在開埠的部份,fd不曉得為何會『等於』負1, 是有什麼權限小弟尚未打開嗎!? 還請各位板友先進們能夠提點小弟, 小弟感激不禁...謝謝:D ------------------------------------------------------------------------------------------------------ #include <stdlib.h> #include <string.h> #include <unistd.h> #include <stdio.h> #include <termio.h> #include <errno.h> #include <fcntl.h> #include <string.h> #include "matrix500.h" int main(int argc, char *argv[]) { int fd, interface, ret,iCount=1; char buf[1024]; struct termios T_new; //開啟串列埠 fd = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_NDELAY); if (fd == -1) { printf("open COM1 Failed, errno: %d\r\n", errno); return 0; } //設定為RS-232 interface = UC500_UART_TYPE_232; if(ioctl(fd, UC500_SET_UART_TYPE, &interface) != 0) { printf("set UART type: %d...Failed, errno: %d\r\n", interface, errno); close(fd); return 0; } //讀取串列埠參數至結構變數中 if (tcgetattr(fd, &T_new) != 0) { printf("tcgetattr failed. errno: %d\r\n", errno); close(fd); return 0; } //設定通訊參數 T_new.c_cflag = (B9600 | CS8 | CREAD | CLOCAL);/* 控制模式旗標 */ T_new.c_cflag &= ~PARENB; //No parity T_new.c_cflag &= ~CSTOPB; //Stop bit = 1 T_new.c_oflag = 0; /* 輸出模式旗標 */ T_new.c_lflag = 0; /* 區域模式旗標 */ //將設定寫回,並即時反應 if (tcsetattr(fd, TCSANOW, &T_new) != 0) { printf("tcsetattr failed. errno: %d\r\n", errno); close(fd); return 0; } printf( "Ready to communicate ttys1 (Loop back) ...\n\n"); while(1) { iCount++; //輸出資料 sprintf(buf,"Data Send %d ",iCount); printf("Out : %s , Len = %d\n",buf,strlen(buf)); write(fd, buf, strlen(buf)) ; usleep(500000); //擷取資料 ret = read(fd, buf, sizeof(buf)); if (ret > 0) { printf("In :% s , Len = %d\n",buf,ret); } if (iCount>100) iCount = 0; } return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.124.42.56

03/26 15:58, , 1F
errno是?
03/26 15:58, 1F

03/26 16:08, , 2F
用error(exit_stat,errno,""); 回報是什麼問題
03/26 16:08, 2F

03/27 08:35, , 3F
建議先用 root 權限測試
03/27 08:35, 3F
感謝各位熱心的板友回答,errno是回報13.. 問題已經解決,經測試的確是權限的問題.. 我以為使用者就一定有開port的權利.. (請原諒Linux新手..) 謝謝大家哦^^ ※ 編輯: BIAO 來自: 140.124.42.56 (03/27 16:56)
文章代碼(AID): #1HKIu5E8 (C_and_CPP)
文章代碼(AID): #1HKIu5E8 (C_and_CPP)