2016-09-07 18 views
2

我已經爲Android編寫了一個C/C++應用程序(NDK),它可以打開用於串行通信的虛擬端口。它在同一個進程中從端口寫入和讀取字節。這是迄今爲止工作,我不需要爲了做到這一點而根植我的設備。這是一個簡單PROGRAMM其執行以下操作:使用Android上的虛擬串行通信在兩個進程(應用程序)中讀/寫字節

int fd = open("/dev/ptmx", O_RDWR | O_NOCTTY); 
if (fd == -1) { 
    LOGW("error opening file"); 

    return 1; 
} 

grantpt(fd); 
unlockpt(fd); 

char* pts_name = ptsname(fd); 
LOGI("ptsname: %s\n", pts_name); 

char* inputbyte = "This is a test\n"; 

char byte; 

int numOfBytesWritten = write(fd, inputbyte, strlen(inputbyte)); 
LOGI("Number of bytes written: %d\n", numOfBytesWritten); 

while (read(fd, &byte, 1) == 1) { 
LOGI("Byte: %c\n", byte); 
} 

close(fd); 

現在的問題是,如果我想要做的兩個進程(兩個應用程序)這同一件事它doesn't工作。一個進程打開/ dev/ptmx,另一個進程應該打開/ dev/pts目錄。每次奴隸試圖打開/ dev/pts目錄我得到錯誤「錯誤打開文件」(-1)。我植根於我的設備,但仍然無法正常工作。打開/ dev/ptmx目錄以等待從服務器後,我有一個睡眠功能。

我該怎麼辦?有任何想法嗎?

+0

沒有語言「C/C++」!只有兩種不同的語言C和C++。 – Olaf

回答

3

我已經解決了這個問題,所以我會後的情況下,別人的解決方法是興趣:

(1)你的手機應該紮根。 (2)主站以「/ dev/pts/N」格式打開一個端口(在本例中爲變量pts_name),其中N是一個數字。

int fd = open("/dev/ptmx", O_RDWR | O_NOCTTY); 
if (fd == -1) { 
    LOGW("error opening file"); 
    return 1; 
} 
char* pts_name = ptsname(fd); 
LOGI("ptsname: %s\n", pts_name); 

(3)給出的權限的端口(這可以通過編程或從ADB殼來完成):此端口由下式給出。從殼將是:

  • 搭配chmod 666 pts_name(例如搭配chmod 666的/ dev/PTS/4)。

(4)執行正好打開此端口的從站。例如int fd = open(「/ dev/pts/4」,O_RDWR);

(5)Voilà!

相關問題