亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2984 | 回復: 4
打印 上一主題 下一主題

[C] 請教一個異常操作造成的CORE的問題 [復制鏈接]

論壇徽章:
0
跳轉到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2008-01-16 23:43 |只看該作者 |倒序瀏覽
程序處理流程:
      LINUX上一個多線程程序,其中一個線程在收到消息后在一個目錄里將消息寫入文件。第一次接到消息的時候FOPEN用a方式建立一個文件,每次收到消息用fseek將文件偏移量移到文件末,再寫入
直到文件達到2M后,關閉文件,再建立一個文件,重復以上操作

     程序一直正常,今天一個人刪除了我寫文件的目錄或文件(他不記得是在FTP工具中進入目錄刪除所有文件,還是直接刪除的目錄了),總之造成了程序coredump,我用GDB打開core文件,用where看到最后的stack是在fseek那句話上。

     后來我單獨編寫文件測試了一下,fopen打開以后,即使刪除了文件,fseek也正常,fprintf也正常,只要不fclose,是不會core的。
     
     一時不知為何會coredump了

[ 本帖最后由 rocknio 于 2008-1-16 23:46 編輯 ]

論壇徽章:
0
2 [報告]
發(fā)表于 2008-01-17 09:30 |只看該作者
印象中fseek等調用的時候是操作內核中的數據,寫入的時候也是先寫入到內核緩沖區(qū),你的測試程序在調用fclose之前不會core,我想可能因為fprintf只是把數據寫入到內核緩沖區(qū)了,而掉fclose的時候才會真正的寫入到文件中去.
至于你原來那個程序,因為一直在寫文件,內核緩沖區(qū)在滿了的時候也會把數據刷到文件中去,所以,會出現core.

論壇徽章:
0
3 [報告]
發(fā)表于 2008-01-17 10:09 |只看該作者
1, 用 'a' 打開文件,寫的時候會自動添加在文件末尾,所以不用 fseek
2, 在unix系統(tǒng)上,刪掉一個文件,其實只是unlink。只要有程序一直開著它,它就會一直存在。

所以你再找找別的原因吧

論壇徽章:
0
4 [報告]
發(fā)表于 2008-01-17 17:14 |只看該作者

由此引出的另一個問題

在windows系統(tǒng)中如果某進程在操作一個文件,這個文件是無法被刪除的
但是在linux,unix的文件系統(tǒng)機制下好像自己實現這一點比較麻煩
不知道有沒有什么好辦法解決在我open后,close前保證文件不被rm掉?

論壇徽章:
0
5 [報告]
發(fā)表于 2008-01-17 21:57 |只看該作者
原帖由 rocknio 于 2008-1-17 17:14 發(fā)表
在windows系統(tǒng)中如果某進程在操作一個文件,這個文件是無法被刪除的
但是在linux,unix的文件系統(tǒng)機制下好像自己實現這一點比較麻煩
不知道有沒有什么好辦法解決在我open后,close前保證文件不被rm掉?


記錄鎖可以,但它是advisory的,也就是說必須所有進程都配合,去檢查那個鎖才行。
unix network programming vol2:IPC里講到過。手頭沒書也可以 man fcntl 看里面的F_GETLK F_SETLK
或 man flock lockf

有的系統(tǒng)有強制鎖,UNP v2 9.5 節(jié)提到:
the group-execute bit must be off, and
the set-group-id bit must be on

(但我在FreeBSD, linux 和Solaris上試了,好像都不行)

[ 本帖最后由 lgfang 于 2008-1-18 09:18 編輯 ]
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP