使用临时文件mkstemp和输出errno对应的错误描述信息strerror
生活随笔
收集整理的這篇文章主要介紹了
使用临时文件mkstemp和输出errno对应的错误描述信息strerror
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
/* <<高級Linux編程.pdf>> page24-25: temp_file.cmkstemp: 從一個文件名模板(結尾是:XXXXXX)生成臨時文件名,創建這個臨時文件,將模式設置為僅當前用戶可以訪問,并且以讀寫權限打開這個文件。mkstemp函數用其他字符替換這些X以得到一個不重復的文件名,函數返回已經打開的文件描述符。由mkstemp創建的臨時文件是不會被自動刪除的。如果這個臨時文件只是程序內部使用而不會移交給其他程序,在創建之后調用unlink是個不錯的主意。只有當所有指向該文件的描述符都被關閉的時候,它才會被文件系統真正刪除。
*/#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>extern int errno; // 使用外部全局變量errnoint writeTempfile(char *buffer, size_t length)
{char temp_filename[] = "/tmp/temp_file.XXXXXX"; // 這6個"x"必須要大寫,否則創建文件失敗(Error: Invalid argument)int fd = mkstemp(temp_filename);if(fd == -1){printf("Can't open tempfile [%s]\n", temp_filename);perror("mkstemp"); // perror: 也會顯示錯誤描述信息fprintf(stderr, "ErrorMessage: %s\n", strerror(errno)); // strerror: 顯示errno對應的錯誤描述信息}else{printf("fd = %d\n", fd);unlink(temp_filename);write(fd, &length, sizeof(length));write(fd, buffer, length);}return fd;
}char* readTempfile(int temp_file, size_t *length)
{char *buffer;int fd = temp_file;lseek(fd, 0, SEEK_SET);read(fd, length, sizeof(*length));buffer = malloc(*length);if(buffer != NULL)read(fd, buffer, *length);close(fd);return buffer;
}int main(int argc, char *argv[])
{char str[] = "What can I do for you?\n你知道我在干什么嗎?\n";int len = strlen(str);int fd;if((fd = writeTempfile(str, len)) != -1){char *buf = readTempfile(fd, &len);if(buf != NULL)printf("buf = [%s]\t%d\n", buf, len);elseprintf("buf == NULL\n");}return 0;
}
運行結果:
?
總結
以上是生活随笔為你收集整理的使用临时文件mkstemp和输出errno对应的错误描述信息strerror的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 台积电放大招:甩开英特尔 7nm和5nm
- 下一篇: 国家地理相关资源数据库