APUE 第二版 習題3.6

APUE 第二版 習題3.6

 

result

wo de meng

write error!

 

  

csdn論壇上問了這個問題,感謝brookmill的指導!

brookmill在給出答案的同時,還給出了查找問題根源的方法。以下是他的答覆:

if (write(fd, buf, n) != n)

{

  printf("%d: %s/n", errno, strerror(errno)); // 需要errno.hstring.h

  printf("write error!/n");

輸出 9: Bad file descriptor

man 2 write裏面的解釋是

  EBADF fd is not a valid file descriptor or is not open for writing.

所以,問題應該是出在open

$ man 2 open

...... The argument flags must include one of the following access modes: O_RDONLY, O_WRONLY, or O_RDWR. 

 

open的地方改成 open(argv[1],O_RDWR|O_APPEND)

或者 open(argv[1],O_WRONLY|O_APPEND)

這樣就可以寫進去了。

 

小結:

strerror打印出出錯信息真的對調試很有幫助。以後要多加運用。

 

另外,找出問題根源之後再來翻閱APUE,發現48open函數一節的確提到了這個問題:即打開或創建文件時,oflag參數中必須指定O_RDONLYO_WRONLYO_RDWR三個常量中的一個且只能指定一個。

 

小結:只看書往往會在理解上有疏漏,通過練手才能發現理解上的偏差或不足。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章