亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關于Linux C write函數的一些情況,麻煩解釋一下哦!

關于Linux C write函數的一些情況,麻煩解釋一下哦!

MMTTMM 2021-10-20 19:15:25
#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>#include <stdio.h>#include <string.h>#define FILENAME "/home/test.txt"#define FLAGS O_WRONLY | O_CREAT | O_TRUNC#define MODE 0666int main(void){char buf1[ ]={"abcdefghij"};char buf2[ ]={"1234567890"};int fd;int count;const char *pathname=FILENAME;if ((fd=open(pathname, FLAGS, MODE)==-1)){printf("error, open file failed!\n");exit(1);}count=strlen(buf1);if (write(fd, buf1, count)!=count){printf("error, write file failed!\n");exit(1);}if (lseek(fd, 50, SEEK_SET)==-1){printf("error, lseek failed!\n");exit(1);}count=strlen(buf2);if (write(fd, buf2, count) != count){printf("error, write file failed!\n");exit(1);}return 0;}/*gcc -o hole hole.c./holels /home/test.txtod -c /home/test.txt*/求指點:為什么/home/test.txt文件總是為0字節,內容并沒有寫到文件中
查看完整描述

2 回答

?
揚帆大魚

TA貢獻1799條經驗 獲得超9個贊

好隱蔽的一個錯誤?。?if ((fd=open(pathname, FLAGS, MODE)==-1)) 這句,括號的位置錯誤了
應該是: if ( (fd=open(pathname, FLAGS, MODE))==-1)
原寫法,導致fd值為0,成了標準輸入(終端)了,所以,lseek就會一直報錯!

查看完整回答
反對 回復 2021-10-24
?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

1.功能

將數據寫入已打開的文件內
2.相關函數
open,read,fcntl,close,lseek,sync,fsync,fwrite
3.表頭文件
#include<unistd.h>
4.定義函數
ssize_t write (int fd,const void * buf,size_t count);
5.函數說明
write()會把參數buf所指的內存寫入count個字節到參數fd所指的文件內。當然,文件讀寫位置也會隨之移動。
6.返回值
如果順利write()會返回實際寫入的字節數。當有錯誤發生時則返回-1,錯誤代碼存入errno中。
7.錯誤代碼
EINTR 此調用被信號所中斷。
EAGAIN 當使用不可阻斷I/O 時(O_NONBLOCK),若無數據可讀取則返回此值。
EBADF 參數fd非有效的文件描述詞,或該文件已關閉。



查看完整回答
反對 回復 2021-10-24
  • 2 回答
  • 0 關注
  • 552 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號