LINUX write問題指教 謝謝高手們^^"

我們生活周遭存在太多太多的 embedded system ,過去 embedded system 有專屬的 OS,現在 linux 也可以應用在嵌入式環境,不過本版將廣泛討論所有嵌入式系統不只 linux 喔,歡迎有這方面經驗或有興趣的朋友一同進來討論。

版主: chester

LINUX write問題指教 謝謝高手們^^"

文章a910937 » 週日 1月 11, 2009 7:49 pm

請問高手們:為什麼我的write會一直無法寫入我指定的文件裡面呢?? 執行時會一直顯示 -1(錯誤訊息)
我是在LINUX系統下的操作~(我的serial: ttyS0,ttyS1 權限都已開通)
以下是我的程式,謝謝@@: :mrgreen:
我還是不懂為何會無法寫入-.-" (程式執行時,接收端 會print:write to baseband.txt failed)->結果777.txt內容無法寫入baseband.txt裡面,接收確定有收到從傳送端的內容,因為我有print出來傳送端txt裡面的內文~ :shock:
/********************************************
* send data
* fdcom: data: datalen:
*********************************************/
int PortSend(int fdcom, char *data, int datalen)
{
int len = 0;

len = write(fdcom, data, datalen);
if(len == datalen){
return (len);
}
else{
tcflush(fdcom, TCOFLUSH);
return -1;
}
}
/*******************************************
receive data
********************************************/
int PortRecv(int fdcom, char *data, int datalen, int baudrate)
{
int readlen, fs_sel;
fd_set fs_read;
struct timeval tv_timeout;

FD_ZERO(&fs_read);
FD_SET(fdcom, &fs_read);
tv_timeout.tv_sec = TIMEOUT_SEC(datalen, baudrate);
tv_timeout.tv_usec = TIMEOUT_USEC;

fs_sel = select(fdcom+1, &fs_read, NULL, NULL, &tv_timeout);
if(fs_sel){
readlen = read(fdcom, data, datalen);
return(readlen);
}
else{
return(-1);
}

return (readlen);
}
//*******************Test*************************//
int main(int argc, char *argv[])
{
int fdcom,fd, SendLen, RecvLen,fs,res,c,nread;
struct termios termios_cur;
char buffer[1024];
char buff[1024];
portinfo_t portinfo ={
'0', // print prompt after receiving
38400, // baudrate:38400
'8', // databit: 8
'0', // debug: on
'0', // echo: on
'2', // flow control:
'1', // default tty:
'0', // parity: none
'1', // stopbit: 1
0 // reserved
};

fdcom = PortOpen(&portinfo); /*open serial :ttyS1 */
if(fdcom>0)
{
printf("open serial port: /dev/ttyS1 OK!\n");
}

PortSet(fdcom,&portinfo);

if(atoi(argv[1]) == 0)
{
//send data TX
fd = open("/mnt/777.txt", O_RDWR | O_SYNC ); /*open serial port */
res=read(fd,buffer,1024);
SendLen = PortSend(fdcom,buffer,1024);

if(SendLen>0){
printf("send data is: %s. NO is:%d \n ",buffer, res);
}
else{
printf("error:send failed.\n");
}

PortClose(fdcom);
}

if(atoi(argv[1]) == 1)
{
//receive data RX
for(;;)
{
fs = open("/mnt/test/baseband.txt", O_RDWR | O_SYNC | O_CREAT , S_IRWXU | S_IRWXO );
RecvLen=PortRecv(fdcom,buff,1024,portinfo.baudrate);
c=write(fs,buff,strlen(buff));

close(fs);
if(c<0)
{
printf("write to baseband.txt failed.\n");
printf("erron is: %s\n",strerror);
}

if( RecvLen>0 )
{
printf("Receive data is: %s NO is:%d %d\n.", buff , RecvLen, c );
}
else{
printf("Receive error\n");
}

sleep(1);
}
}
close(fdcom); //close port ttyS1
exit(0);
}

煩請指導小妹 謝謝^^"
a910937
可愛的小學生
可愛的小學生
 
文章: 13
註冊時間: 週二 9月 09, 2008 3:05 pm

文章paulliu » 週一 1月 19, 2009 1:15 am

> c=write(fs,buff,strlen(buff));

為啥 buff 長度用 strlen() 去算??
你的 buff 是 text??

為啥不用 RecvLen?

write(fs,buff,0) 也是會傳回 -1 的.
paulliu
 

文章a910937 » 週一 2月 09, 2009 3:04 pm

謝謝您 問題已解決了^^
a910937
可愛的小學生
可愛的小學生
 
文章: 13
註冊時間: 週二 9月 09, 2008 3:05 pm

文章test » 週二 2月 10, 2009 8:56 am

在這裡問題的只會說問題解決了,怎麼解決的不會說,看了就不想回。
test
 

文章blc_ » 週二 2月 10, 2009 1:46 pm

不是用RecvLen()取代strlen()嗎?
blc_
 

文章a910937 » 週二 2月 10, 2009 9:57 pm

blc_ 寫:不是用RecvLen()取代strlen()嗎?


後來我是用sizeof()
還有修改了 判斷 if(RecvLen>0) ....程序....
就沒有問題了~ :D
a910937
可愛的小學生
可愛的小學生
 
文章: 13
註冊時間: 週二 9月 09, 2008 3:05 pm

文章a910937 » 週二 2月 10, 2009 9:58 pm

test 寫:在這裡問題的只會說問題解決了,怎麼解決的不會說,看了就不想回。



抱歉....因為我看此篇很久沒人回應...以為沒人想討論...
所以我才草草結尾回答....= =
請原諒 :(
a910937
可愛的小學生
可愛的小學生
 
文章: 13
註冊時間: 週二 9月 09, 2008 3:05 pm

文章訪客 » 週六 2月 14, 2009 10:24 am

It would be better if you can post the solution of how you solve it. That would shed some lights for others who encounter the similar problems.
訪客
 

文章訪客 » 週四 6月 11, 2009 1:40 pm

大大您好,目前我也在研究rs232通訊方式,看到你寫的文章和問的問題,知道你以解決,是否可以幫我,我是直接利用字元傳送出去(前面設定需要打給你看嗎),但回傳會是-1值,如下程式,謝謝
int n=wrute(fd,"ATE\n",4);
訪客
 

Re: LINUX write問題指教 謝謝高手們^^"

文章drco » 週二 1月 05, 2010 5:12 pm

試試看
如下程式:
int n;
n= write (fd,"ATE",3);
drco
可愛的小學生
可愛的小學生
 
文章: 5
註冊時間: 週二 1月 05, 2010 4:40 pm


回到 embedded system

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客