① 在 linux 中編寫 c 程序,使用 read() 函數, 為什麼每次的返回值都是1 read(srcFile, buf, 100);
如果讀取正確,read()的返回值是本次讀取的位元組數,要看你程序怎麼寫的了,但看來是你的read()函數每次只讀取了一個位元組。
② c語言中輸入語句read(a,b,c)表示什麼意思
ssize_t read (int fd, void *buf, size_t count);
read(a,b,c)
就是從打開文件a中,讀取c個位元組,存到buf中
返回實際讀到的位元組數。如果出錯 返回-1
③ C語言讀取文件如何返回一個數組
c語言沒有直接讀取返回數組的函數。
看你問題里文件內容格式是:一行一個字元串回車換行。
那麼,用fgets一次讀一行,你寫循環調用這個fgets函數把讀取的值放在數組里。
至於你說的數組長度寬度不定,在c里需用malloc動態申請內存。
方法1:用fseek和ftell獲取整個文件位元組數,然後用malloc申請一個整個文件大小的內存地址(二維數組在內存中就是一維)。然後在循環中每次讀取一行到這個地址並計算一行長度,利用指針移得到每行首地址,最後所有行指針組成二維數組(行數也是動態申請)
方法2:你定義一個比較大的字元數組,作為零時存儲變數,每次循環中讀取一行到這個數組,再用strlen計算字元串長度,再用malloc按照這個長度申請一組地址(一行),並利用strcpy轉移內容,最後組成二維數組。
方法3:直接用malloc申請很大的二維數組,循環讀取獲取內容後,strlen獲取每行實際內容的長度。最後用realloc根據實際寬度和行數修改數組大小。
④ C語言的read函數返回-1是為什麼呢文件是存在的哦
返回-1是讀錯誤,你列印一下errno看下:
if((size=read(fd,buf,SIZE))<0)
{
perror("read:");
}
看一下錯誤信息才能判斷問題。
⑤ 請問C語言的read()函數,謝謝
有區別的
if(fd=open("tem.txt",O_RDWR)==-1)
這里的話是先運行open("tem.txt",O_RDWR)==-1這個的,這個的值是0或者1的『
那麼FD的值就不是文件的頭指針了
而下面的是先運行fd=open("tem.txt",O_RDWR
然後再將FD和-1作比較的
⑥ arm6410,linux,c語言,read函數返回-1,錯誤:bad address
1、可以事先檢查一下傳遞給 read() 函數的 fd 是否合法,即在 'if ((nread = read(fd,myBuff2,strlen(myBuff2)))>0)' 之前判斷 if ( fd == NULL ) printf("出錯啦!\n");
2、read()函數是文件操作函數,在c語言中很重要。
函數的返回值如下:
(1)如果成功,返回讀取的位元組數;
(2)如果出錯,返回-1並設置errno;
(3)如果在調read函數之前已是文件末尾,則返回0
⑦ C語言 write和read語句的基本用法
1、函數名: write
表頭文件:#include<unistd.h>
定義函數:ssize_t write (int fd,const void * buf,size_t count);
函數說明:write()會把指針buf所指的內存寫入count個位元組到參數fd所指的文件內。當然,文件讀寫位置也會隨之移動。
返回值:如果順利write()會返回實際寫入的位元組數。當有錯誤發生時則返回-1,錯誤代碼存入errno中。
錯誤代碼:
EINTR 此調用被信號所中斷。
EAGAIN 當使用不可阻斷I/O 時(O_NONBLOCK),若無數據可讀取則返回此值。
EBADF 參數fd非有效的文件描述詞,或該文件已關閉。
程序例:
#include<stdlib.h>
#include<unistd.h>
#include<stdio.h>
#include<string.h>
#include<fcntl.h>
#include<errno.h>
intmain(void)
{
inthandle;
charstring[40];
intlength,res;
/*
Createafilenamed"TEST.$$$"inthecurrentdirectoryandwrite
astringtoit.If"TEST.$$$"alreadyexists,itwillbeoverwritten.
*/
if((handle=open("TEST.$$$",O_WRONLY|O_CREAT|O_TRUNC,
S_IREAD|S_IWRITE))==-1)
{
printf("Erroropeningfile. ");
exit(1);
}
strcpy(string,"Hello,world! ");
length=strlen(string);
if((res=write(handle,string,length))!=length)
{
printf("Errorwritingtothefile. ");
exit(1);
}
printf("Wrote%dbytestothefile. ",res);
close(handle);
return0;
}
structxfcb{
charxfcb_flag;/*Contains0xfftoindicatexfcb*/
charxfcb_resv[5];/*ReservedforDOS*/
charxfcb_attr;/*Searchattribute*/
structfcbxfcb_fcb;/*Thestandardfcb*/
};
2、函數名: read
表頭文件:#include<unistd.h>
定義函數:ssize_t read(int fd,void * buf ,size_t count);
函數說明:read()會把參數fd 所指的文件傳送count個位元組到buf指針所指的內存中。若參數count為0,則read為實際讀取到的位元組數,如果返回0,表示已到達文件尾或是無可讀取的數據,此外文件讀寫位置會隨讀取到的位元組移動。
附加說明:如果順利read()會返回實際讀到的位元組數,最好能將返回值與參數count 作比較,若返回的位元組數比要求讀取的位元組數少,則有可能讀到了文件尾、從管道(pipe)或終端機讀取,或者是read()被信號中斷了讀取動作。當有錯誤發生時則返回-1,錯誤代碼存入errno中,而文件讀寫位置則無法預期。
錯誤代碼:
EINTR 此調用被信號所中斷。
EAGAIN 當使用不可阻斷I/O 時(O_NONBLOCK),若無數據可讀取則返回此值。
EBADF 參數fd 非有效的文件描述詞,或該文件已關閉。
程序例:
#include
#include
#include
#include
#include
#include
intmain(void)
{
void*buf;
inthandle,bytes;
buf=malloc(10);
/*
.$$$andattempts
toread10bytesfromit.To
}
if((bytes=read(handle,buf,10))==-1){
printf("ReadFailed. ");
exit(1);
}
else{
printf("Read:%dbytesread. ",bytes);
}
return0;
⑧ C語言read函數
read()函數是文件操作函數
在c語言中很重要,
函數的返回值如下:
(1)如果成功,返回讀取的位元組數;
(2)如果出錯,返回-1並設置errno;
(3)如果在調read函數之前已是文件末尾,則返回0
⑨ c語言socket編程read()函數問題
write/read,是關於寫特定的文件描述符使用的比較底層的系統調用,
sendto/recvfrom適用於用udp(數據包)方式的套接字中使用的,
其他的沒見過,我是學linux編程的
Windows下的socket和Linux下的socket是不一樣的,我沒有查到sendmsg/recvmsg這個方法,上面的鏈接是一個類似的函數,它和send/recv 的區別是,這個函數可以發送socket控制信息,看API就知道。
另外我也沒有看到有write/read函數。 sendto/recvfrom用於UDP鏈接,send/recv用於TCP鏈接。
你列舉的其餘函數,我都沒找到。下面的API地址供樓主查詢驗證。
http://msdn.microsoft.com/en-us/library/windows/desktop/ms741692(v=vs.85).aspx