關於close函式和cp命令
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
int main()
{
int fd;
close(1);//這個是關閉了檔案標誌符為1的檔案
fd = open("./hello",O_RDWR|O_CREAT,0666);//fd是記錄了系統返回的所新建的並開啟的檔案識別符號
if(-1 == fd)
{
perror("open error");
return -1;
}
printf("fd is %d\n",fd);//此時輸出的fd為1,因為是順序依次的第一個
return 0;
}
/*
============================================================================
Name : cp.c
Author :
Version :
Copyright : Your copyright notice
Description : Hello World in C, Ansi-style
============================================================================
*/
#include<sys/stat.h>
#include<sys/types.h>
#include<fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include<errno.h>
int write_buffer(int fd,const void *buf,size_t count)
{
int n=0,r=count;
while(count>0)
{
n=write(fd,buf,count);
if(n==0)
{
r=0;
break;
}
if(n>0)
{
count-=n;
buf+=n;
}
else if(n<0)
{
if(errno==EINTR)
{
continue;
}
r=-1;
break;
}
}
}
int main(int argc,char **argv) {//char *argv[],指標陣列,存放指標的陣列
int fd1,fd2;
char buf[128];
int readnu,writenu;
if(argc!=3)
{
printf("you should enter 3 ");
return -1;
}
fd1=open(argv[1],O_RDONLY);//按只讀方式開啟這個原始檔,一般只有建立的時候才有三個引數
if(fd1==-1)
{
perror("source file wrong");
return -1;
}
fd2=open(argv[2],O_CREAT|O_WRONLY|O_TRUNC,0666);//如果要複製的那個檔案是存在的則用O_TRUNC清除,如果不存在,以只寫方式寫入,沒有則可以建立的
if(fd2==-1)
{
perror("copy file wrong");
close(fd1);//如果第二個檔案讀取不成功,則返回之前把第一個檔案給關閉了
return -1;
}
while(readnu=read(fd1,buf,sizeof(buf)))//這是迴圈讀取資料,把每次讀取的字元寫道檔案中去
{
if(readnu>0)//當每次成功讀取到數字的時候
{
writenu=write_buffer(fd2,buf,readnu);//readnu這裡必須要寫成這個,為了防止出錯
if(writenu==-1)
{
return -1;
}
else if((readnu==-1)&&(errno!=EINTR))// EINTR 此呼叫被訊號所中斷。
{
break;
}
}
}
close(fd1);
close(fd2);
return EXIT_SUCCESS;
}
//建立檔案111
//在終端下編譯:gcc cp.c
//然後 a.out 111 222
//檢驗 diff 111 222如果不一樣會出新提示符
相關文章
- open和close函式函式
- C#中解構函式,Close函式,Dispose函式的區別C#函式
- 關於變數的宣告和定義、內部函式和外部函式變數函式
- CP命令
- document.close()函式簡單介紹函式
- 關於函式指標函式指標
- Linux cp命令和scp命令使用詳解Linux
- Linux命令—–CP命令Linux
- 關於count函式的理解函式
- 關於path_alloc()函式函式
- 關於inline函式inline函式
- 關於lag函式的用法函式
- MySQL 5.7關於日期和時間的函式整理MySql函式
- query rewrite和基於函式的索引有關係?函式索引
- 關於rand和srand函式使用的一點心得函式
- Linux cp命令Linux
- 【ASM】ASMCMD cp 命令ASM
- 關於建構函式與解構函式的分享函式
- 關於js節流函式throttle和防抖動debounceJS函式
- C++關於DLL匯出模板類和模板函式C++函式
- python關於函式形參Python函式
- 關於scanf函式的問題函式
- 關於函式索引的問題?函式索引
- Oracle中關於函式的使用Oracle函式
- 關於qt中的tr()函式QT函式
- 關於Oracle取整的函式Oracle函式
- 關於C++引用做為函式引數和指標作為函式引數C++函式指標
- 和Null有關的函式Null函式
- linux 的cp命令Linux
- C語言關於回撥函式和this指標探討C語言函式指標
- linux命令之----cp命令用於複製檔案或目錄Linux
- 關於cuda中的函式問題函式
- 關於oracle內建函式的使用Oracle函式
- 關於Oracle自定義分組函式Oracle函式
- 關於函式索引(function-based index)函式索引FunctionIndex
- 關於字串的功能函式小結字串函式
- 關於ES6的箭頭函式和展開運算子函式
- 關於container_of和list_for_each_entry 及其相關函式的分析AI函式