win32錯誤碼和linux的錯誤碼的簡單轉換

來源:互聯網
上載者:User

我們知道,在linux下,我們用errno來查看API返回的錯誤碼,並用strerror(errno)來獲得錯誤資訊。

而在windows下也有這的錯誤碼,可以用GetLastError

來獲得,在windows下,要獲得錯誤碼對應的資訊就沒有linux下那麼方便了。

其獲得方式可以參考《windows核心編程》。

 

但我們也可以用linux下的api來獲得windows下的錯誤資訊,其條件就是把windows下的錯誤碼轉換成linux下相應的錯誤碼,然後再調用

strerror(errno)來獲得錯誤資訊。

 

如果我們在windows下用cygwin來寫程式,那麼從windows下的API獲得的錯誤嗎,如果用linux下的函數strerror(errno)來顯示的話,那麼我們就要做一個win32錯誤碼和linux下錯誤碼的一個簡單轉換。

 

這個簡單轉換的函數如下:

 

int w32error_to_errno(unsigned int w32error)<br />{<br />switch (w32error) {<br />case ERROR_INVALID_FUNCTION:<br />return EBADRQC;<br />case ERROR_FILE_NOT_FOUND:<br />case ERROR_PATH_NOT_FOUND:<br />case ERROR_INVALID_NAME:<br />return ENOENT;<br />case ERROR_TOO_MANY_OPEN_FILES:<br />return EMFILE;<br />case ERROR_ACCESS_DENIED:<br />return EACCES;<br />case ERROR_INVALID_HANDLE:<br />return EBADF;<br />case ERROR_NOT_ENOUGH_MEMORY:<br />return ENOMEM;<br />case ERROR_OUTOFMEMORY:<br />return ENOSPC;<br />case ERROR_INVALID_DRIVE:<br />case ERROR_BAD_UNIT:<br />return ENODEV;<br />case ERROR_WRITE_PROTECT:<br />return EROFS;<br />case ERROR_NOT_READY:<br />case ERROR_SHARING_VIOLATION:<br />return EBUSY;<br />case ERROR_BAD_COMMAND:<br />return EINVAL;<br />case ERROR_SEEK:<br />case ERROR_NEGATIVE_SEEK:<br />return ESPIPE;<br />case ERROR_NOT_SUPPORTED:<br />return EOPNOTSUPP;<br />case ERROR_BAD_NETPATH:<br />return ENOSHARE;<br />default:<br />/* generic message */<br />return ENOMSG;<br />}<br />}

 

那麼,如果我們想輸出錯誤資訊,就可以這樣了

errno = w32error_to_errno(GetLastError());<br />strerror(errno);

 

雖然,不能獲得完全準確的錯誤資訊,但這個對於誇win32和linux的編程來說,至少可以省下一部分麻煩。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.