//error handle
void my_err(const char* errno_string,int line){
fprintf(stderr,"line:%d ",line);
perror(errno_string);
exit(1);
}
//self-definded read data function
int my_read(int fd){
int len;
int ret;
int i;
char read_buf[64];
//get length of file and keep point of file at the srart
if(lseek(fd,0,SEEK_END) == -1){
my_err("lseek",__LINE__);
}
if((len = lseek(fd,0,SEEK_CUR)) == -1){
my_err("lseek",__LINE__);
}
if(lseek(fd,0,SEEK_SET) == -1){
my_err("lseek",__LINE__);
}
printf("len:%d\n",len);
//read data
if((ret = read(fd,read_buf,len)) < 0){
my_err("read",__LINE__);
}
//print data
for(i = 0;i<len;i ){
printf("%c",read_buf[i]);
}
printf("\n");
return ret;
}
int main()
{
int fd;
char write_buf[32] = "hello boy!";
//create example2 in current directory
if((fd = creat("example2.c",S_IRWXU)) == -1){
// if((fd = open("example2.c",O_RDWR|O_CREAT|O_TRUNC,S_IRWXU)) == -1){
my_err("open",__LINE__);
}else{
printf("craete file success\n");
}
//write data
if(write(fd,write_buf,strlen(write_buf)) != strlen(write_buf)){
my_err("write",__LINE__);
}
my_read(fd);
//Spacing of presentation files
printf("/*------------*/\n");
if(lseek(fd,10,SEEK_END) == -1){
my_err("lseek",__LINE__);
}
if(write(fd,write_buf,strlen(write_buf)) != strlen(write_buf)){
my_err("write",__LINE__);
}
my_read(fd);
close(fd);
return 0;
}
第 43 行是 main 的這一部分
//create example2 in current directory
if((fd = creat("example2.c",S_IRWXU)) == -1){
my_err("open",__LINE__);
}else{
printf("craete file success\n");
}
當我使用creat時,我得到一個錯誤 line:43 read: Bad file descriptor, 但是我得到了正確的結果open。兩個函式都不應該回傳檔案描述符嗎?為什么要創建回傳錯誤的檔案描述符
當我使用creat時,我得到一個錯誤 line:43 read: Bad file descriptor, 但是我得到了正確的結果open。兩個函式都不應該回傳檔案描述符嗎?為什么要創建回傳錯誤的檔案描述符

uj5u.com熱心網友回復:
兩個函式都不應該回傳檔案描述符嗎?
他們應該而且他們確實這樣做了。
為什么要創建回傳錯誤的檔案描述符
它不應該也不應該。read失敗并Bad file descriptor出現錯誤,而不是creat.
creat以只寫方式打開檔案,因此您無法從中讀取。如果您想從中讀取,這是一個錯誤的檔案描述符。
uj5u.com熱心網友回復:
callcreat(path, mode)的行為與 call 相同open(path, O_CREAT | O_WRONLY | O_TRUNC, mode)。成功后,打開檔案僅用于寫入。傳遞給的檔案描述符read需要打開以進行讀寫或只讀。如果檔案描述符只為寫入而打開,則read使用該檔案描述符的呼叫將失敗。read失敗時,錯誤號表示EBADF檔案描述符不是打開以供讀取的有效檔案描述符。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/414775.html
標籤:
