linux编程-open函数和write函数实现copy命令
生活随笔
收集整理的這篇文章主要介紹了
linux编程-open函数和write函数实现copy命令
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- 文件描述符
文件描述符
? 所有的I/O操作的系統(tǒng)調(diào)用都以文件描述符,一個(gè)非負(fù)整數(shù)(通常是小整數(shù)),來(lái)指代打開(kāi)的文件。
- open函數(shù)打開(kāi)pathname所標(biāo)識(shí)的文件,并返回文件描述文件描述符
- read函數(shù),調(diào)用從fd所指代的打開(kāi)的文件中,讀取至多count字節(jié)的數(shù)據(jù),并保存到buf中去
- write函數(shù),調(diào)用從buf中讀取多達(dá)count字節(jié)數(shù),將數(shù)據(jù)寫入到fd指代的已打開(kāi)的文件中
- close函數(shù), 關(guān)閉已打開(kāi)的文件描述符 fd
完整代碼如下:
#include <sys/stat.h> #include <fcntl.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h>#ifndef BUF_SIZE /* Allow "cc -D" to override definition */ #define BUF_SIZE 1024 #endifint main(int argc, char *argv[]) {int inputFd, outputFd, openFlags;//< 文件權(quán)限mode_t filePerms;ssize_t numRead;char buf[BUF_SIZE];if (argc != 3 || strcmp(argv[1], "--help") == 0)printf("%s old-file new-file\n", argv[0]);//< 已只讀方式打開(kāi)文件第一個(gè)參數(shù)指定的已經(jīng)存在的文件inputFd = open(argv[1], O_RDONLY);if (inputFd == -1)printf("opening file %s", argv[1]);//< 指定打開(kāi)文件的方式openFlags = O_CREAT | O_WRONLY | O_TRUNC;//< 指定打開(kāi)文件后,文件描述符所具有的文件權(quán)限filePerms = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP |S_IROTH | S_IWOTH; /* rw-rw-rw- */outputFd = open(argv[2], openFlags, filePerms);if (outputFd == -1)printf("opening file %s", argv[2]);/* Transfer data until we encounter end of input or an error */while ((numRead = read(inputFd, buf, BUF_SIZE)) > 0) //< 文件中有值就一直 進(jìn)行讀取知道文件讀取返回文件結(jié)尾符號(hào)if (write(outputFd, buf, numRead) != numRead)printf("couldn't write whole buffer");if (numRead == -1)printf("read");if (close(inputFd) == -1)printf("close input");if (close(outputFd) == -1)printf("close output");exit(EXIT_SUCCESS); }想要完整版的工程在這里
github地址
總結(jié)
以上是生活随笔為你收集整理的linux编程-open函数和write函数实现copy命令的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 面向大数据的异构内存系统
- 下一篇: 【2016年第6期】支持植物学大数据整合