使用read()的一個例子
發表于:2007-05-26來源:作者:點擊數:
標簽:
下面的程序我不是原創。 #include sys/types.h #include fcntl.h #include unistd.h #include stdlib.h int main( void ) { int fd; int size_read; char buffer[80]; /* Open a file for input */ fd = open( myfile.dat, O_RDONLY ); /* Read the text */
下面的程序我不是原創。
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
int main( void )
{
int fd;
int size_read;
char buffer[80];
/* Open a file for input */
fd = open( "myfile.dat", O_RDONLY );
/* Read the text */
size_read = read( fd, buffer,
sizeof( buffer ) );
/* Test for error */
if( size_read == -1 ) {
perror( "Error reading myfile.dat" );
return EXIT_FAILURE;
}
/* Close the file */
close( fd );
return EXIT_SU
CCESS;
}
sizeof()是什么意思?
請問這里的 O_RDONLY是什么意思?
請問這里的 EXIT_SUCCESS是術語嗎?還是可以自己定義的?
open64() open()
發現有這兩個相似的函數,他們有什么區別?
我這里沒查到open64()
sizeof()是求變量或數據類型大小的運算符,可以找一本c語言的入門書看一下
O_RDONLY是只讀打開,參見 man 2 open
EXIT_SUCCESS和EXIT_FAILURE是退出碼,參見 man 3 exit
mm,第一個buffer是個指針,指向保存讀出的內容的空間,read返回的是讀到的字節數
謝謝~~請問fd是文件句柄嗎?
第一個是是指針?這里是read特別指定的嗎?就是說是它的格式。
要不是這樣,前面怎么沒定義呀?
前面的buffer[80]就一次搞定了
read返回的是讀到的字節數,不同意你這句話,read()返回的值后面怎么回判斷是否是-1,好象是返回一種狀態
open64()是這個:
Large-file support
These functions support 64-bit offsets.
read的三個參數是:
文件描述符:fd
緩沖區指針:buffer
緩沖區大?。簊izeof(buffer) (== 80)
如果read調用失敗就返回-1(一般系統調用都是失敗返回-1),成功就返回讀到的字節數
另:APUE是一本好書,建議看看,書名是:
《UNIX環境高級編程》(Advanced Programming in the UNIX Environment)
Richard Stevens寫的,機械工業出版社出的中文版。
另外還應該找一本C語言的書看看
謝謝兩位!!!
fd是文件描述符,在perl 用open是這樣:open(handle,"file_name")
我估計fd和handle的作用相同,只是解釋不同
看《UNIX環境編程》P148,有一段。
所有的I/O都是由兩個系統調用完成:read()和write(),它們來自C的同名函數,對于這兩個函數,第一個參數是文件描述符,第二個參數是字符數組,用做數據源或數據目標;第三個參數是要傳輸的字節數。
對第二個參數的解釋好難理解阿。。。不知道英文版的是怎么說的?
比如說有一個緩沖區
char buf[512];
可以這樣來使用:
read(fd, buf, 512);
write(fd,buf,512);
謝謝kj501,對格式感到陌生,先學著吧
原文轉自:http://www.kjueaiud.com
- 評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)
-