1. 程式人生 > >linuxC檔案輸入輸出筆記

linuxC檔案輸入輸出筆記

int chmod(*char,int ):系統呼叫修改檔案訪問許可權屬性函式

  • 標頭檔案:#include < sys/types.h > ,include < sys/stat.h >
  • 返回值:失敗返回-1 成功返回0;
  • 傳入值:
    • 第一個為檔名,可以是檔案自己的名字(即可以修改檔案自己的訪問許可權)
      這裡要注意一下修改自己包括原始檔可執行檔案注意兩個檔案的名字不同
    • 第二個為許可權型別
      1.chmod(“gjldw”,0777);//傳入一個八進位制數(0開頭,這樣有個問題,沒法用一個整形變數來表示一個0開頭的數,只能固定一個許可權。所以有下面這個方法)
      2.chmod(“gjldw”,511);//傳入一個十進位制數
      (這個由八進位制算來的,0777=511,所以就可以通過一個變數來儲存511,可以按照不同的要求進行相應的許可權修改)
      3chmod(“gjldw”,S_IRUSR|S_ISGID |S_ISVTX |…);//傳入字元常量值(這樣問題和第一個一樣。具體的字元常量和對應八進位制如下:)

S_ISUID 04000 檔案的(set user-id on execution)位
S_ISGID 02000 檔案的(set group-id on execution)位
S_ISVTX 01000 檔案的sticky位
S_IRUSR(S_IREAD) 00400 檔案所有者具可讀取許可權
S_IWUSR(S_IWRITE)00200 檔案所有者具可寫入許可權
S_IXUSR(S_IEXEC) 00100 檔案所有者具可執行許可權
S_IRGRP 00040 使用者組具可讀取許可權
S_IWGRP 00020 使用者組具可寫入許可權
S_IXGRP 00010 使用者組具可執行許可權
S_IROTH 00004 其他使用者具可讀取許可權
S_IWOTH 00002 其他使用者具可寫入許可權
S_IXOTH 00001 其他使用者具可執行許可權

open,close,read,write,lseek等函式

#include< stdio.h>
#include< sys/types.h>//read open ...等
#include< sys/stat.h>
#include< fcntl.h>
#include< unistd.h>//lseek
#include< errno.h>//errno全域性變數
int main()
{
    int len,set;
    char b[100];
    char a[]="gjldw"; //int a=100;
    int
p1=open("sdfd.txt",O_RDWR|O_CREAT|O_EXCL,777);//open開啟方式 if(p1==-1)//開啟不成功返回-1,成功返回檔案描述符 { perror("sdfd.txt");//這個函式可以自動找出錯誤提示,此錯誤原因依照全域性變數errno 的值來決定要輸出的字串。在庫函式中有個errno變數,每個errno值對應著以字串表示的錯誤型別。 printf("%s ",strerror(errno));//這兩句和上面那個效果一樣,errno錯誤的編號 printf("%d ",errno); fprintf(stderr,"%d ",__LINE__);//__LINE__這個是內建巨集,表示在原始檔的行數行數(記得是兩個下劃線) exit(1); /*此處退出結果(第二次檔案運時檔案就存在了O_EXCL打開出錯) sdfd.txt: File exists(檔案已存在) File exists 19 24(輸出行數19,輸出errno錯誤的編號:24) */ } write(p1,&a,sizeof(a));//寫函式,返回值為寫入的位元組數 len=lseek(p1,0,SEEK_END);//lseek,返回值為移動後指標距離檔案開頭的位元組數 printf("%d ",len);//(把檔案已到尾返回值賦給len就可以知道檔案的長度) printf("%d ",lseek(p1,0,SEEK_SET));//將指標移動到開頭 printf("%d ",read(p1,b,len));//返回值為讀取的位元組數(已經知道前面檔案長度了,用這個讀一次就好) /*if(read(p1,b,len)!=len)//如果讀的長度和返回值不一樣就說名讀錯了 { perror("read"); }*/ printf("%s \n",b);//輸出一次檔案裡讀的東西 lseek(p1,10,SEEK_END);//這裡就有點奇怪了 檔案指標移動到結尾的後面十個位元組,這時相當與給檔案變長了,末尾加了十個‘\0’, write(p1,&a,sizeof(a));//又寫入了了一次(這是在在檔案末尾添加了一次,即十個‘\0'之後) len=lseek(p1,0,SEEK_END);//再次看一下長度,以及下面的對比一下 printf("%d ",len); printf("%d ",lseek(p1,0,SEEK_SET)); printf("%d ",read(p1,b,len)); printf("%s ",b); close(p1); return 0; }

程式執行第一次結果:
6 0 6 gjldw(注意函式們的返回值)
22 0 22 gjldw(前後對比看出檔案指標移動到結尾的後面的方式)

程式結束後我們用od命令開啟檔案看看裡面的東西
[email protected]:~/gjl/練習/練習$ od -c sdfd.txt
0000000 g j l d w \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0(這裡我們發現加了十個’\0’)
0000020 g j l d w \0
0000026

此外open 的一些開啟方式的引數我就不寫了...

最後記一點巨集跟蹤除錯
ANSI標準說明了五個預定義的巨集名。它們是:
_ _ LINE_ _
_ _ FILE_ _(友情提示他們都是左右雙下劃線)
_ _ DATE_ _
_ _ TIME_ _
_ _ STDC_ _
_ _ FILE _ _ 是內建巨集 代表原始檔的檔名
_ _ LINE _ _ 是內建巨集,代表該行程式碼的所在行號
_ _ DATE_ _巨集指令含有形式為月/日/年的串,表示原始檔被翻譯到程式碼時的日期。
_ _ TIME_ _巨集指令含有形式為時:分:秒的串,表示原始檔被翻譯到程式碼時的時間。
如果實現是標準的,則巨集STDC含有十進位制常量1。如果它含有任何其它數,則實現是非標準的。

end

相關推薦

linuxC檔案輸入輸出筆記

int chmod(*char,int ):系統呼叫修改檔案訪問許可權屬性函式 標頭檔案:#include < sys/types.h > ,include < sys/stat.h > 返回值:失敗返回-1 成功返回0; 傳入值:

c++筆記(10) 檔案輸入輸出

c++ 定義了ifstream, ofstream, fstream類用於檔案處理和操作檔案,這些類定義在標頭檔案<fstream>中。 c++使用“流”來描述資料流動,資料流向程式,則為input stream(輸入流),反之為output stream輸出流

C++ Primer Plus學習筆記(四)(輸入輸出錯誤處理、檔案輸入輸出

1. 字元函式庫 cctype cctype是字元函式庫,用於判斷是否為大寫字母、標點符號、空格等 #include<cctype> char ch; isalpha(ch)//如果ch是字母,返回非零值,否則返回0 ispunct(ch)/

freopen - C/C++檔案輸入輸出利器

freopen以前經常使用,比較方便,可以當作模板,在中間替換為自己的程式碼即可使用。 [cpp] view plain copy #incl

檔案輸入輸出及csv檔案

讀取檔案 fileobject=open('b.txt') result=fileobject.read() print(result) fileobject.close() 測試結果如下圖所示: 寫入檔案: fileobject=open('c.txt',mode='w')

檔案輸入輸出的管理以及管道的使用

在linux作業系統中,一個程式被載入到記憶體並開始執行後是以程序的形式的形態表現出來的,而系統宗的每一個程序在預設的情況下都有三個標準的通道,分別為標準輸入、標準輸出和標準錯誤輸出。標準輸入的操作程式碼為0,標準輸出的操作程式碼為1,標準錯誤輸出的操作程式碼為2。 在linux系統中用普通使用者執行命令

檔案輸入輸出【模板】

檔案輸入輸出【模板】 直接看程式碼 #include <cstdio> int main() { freopen("*.in","r",stdin); freopen("*.out","w",stdout); /*---code---*/ /*---end-

小學生出題系統(檔案輸入輸出

//信1705-2 20173629 何偉豪 package 小學計算題檔案; import java.util.Random; //隨機生成數字的標頭檔案 import java.util.Scanner; //輸入整型資料的標頭檔案 import java.io.*; import

利用陣列的的檔案輸入輸出

利用陣列的檔案輸入輸出 1. 將陣列以二進位制格式儲存到磁碟 np.save和np.load是讀寫磁碟陣列資料的兩個主要函式。預設情況下,陣列是以未壓縮的原始二進位制格式儲存在副檔名為.npy的檔案中的。   import numpy as np arr=np.arange(10)

C ++基礎 | 格式化輸出檔案輸入輸出(File IO),標頭檔案(Header Files)_3

目錄 格式化輸出 檔案輸入輸出(File IO) 標頭檔案(Header Files) 格式化輸出 要格式化資料,我們可以使用轉義字串(Escape Sequence)也稱字元實體(Character Entity)。這些不需要任何額外的庫。 C ++ 轉義字串

Numpy_06 陣列的檔案輸入輸出 線性代數

將陣列寫入本地,將陣列從本地讀取 import numpy as np # NumPy能夠讀寫磁碟上的文字資料或二進位制資料。 # np.save和np.load是讀寫磁碟陣列資料的兩個主要函式。預設

利用python進行資料分析-----第二篇 Numpy 陣列 向量計算 索引 切片 轉置 軸對換 檔案輸入輸出

目錄 布林值索引 花式索引 其他函式 排序 線性代數 隨機數生成 Numpy簡介 NumPy是一種通用的陣列處理軟體包,旨在有效地操縱任意記錄的大型多維陣列,而不會為小

C++檔案輸入輸出

ACM中巧用檔案的輸入輸出來改寫acm程式的輸入輸出 經常有見大神們使用檔案來代替ACM程式中的IO,尤其是當程式IO比較複雜時,可以使自己能夠更專注於程式碼的測試,而不是怎樣敲輸入。   /* *@Author: STZG *@Language: C++ */ #in

C/C++檔案輸入輸出(詳細介紹)

´在標頭檔案iostream中定義有兩個流類:輸入流類istream和輸出流類ostream,且用這兩個類定義了流物件cin和cout: ´Istream cin; ´ostream cout; ´cin是一個istream類的物件,它從標準輸入裝置(鍵盤)獲取資料

C Primer Plus (第五版)中文版——第 13 章 檔案輸入/輸出

13.1  和檔案進行通訊 13.1.1  檔案是什麼 一個檔案(file)通常就是磁碟上的一段命名的儲存區。C 將檔案看成是連續的位元組序列,其中沒一個位元組單獨地讀取。ANSI C 提供了檔案的兩種檢視:文字檢視、二進位制檢視。 13.1.2  文字檢視

vector,string,標準輸入輸出流,檔案輸入輸出流01(C++)

按要求編寫程式。 a) 定義一個結構體型別 Student,如下所示: struct Student { int ID; //學號 string name; //姓名 float score[3]; //三門課程成績 }; b) 編寫一個函式,按照上述結構體定義,依次從鍵盤輸

hdfs nfs 報錯:cp: 無法建立普通檔案: 輸入/輸出錯誤

使用mount.nfs  $nfs_ip:/  /mnt/hdfs之後,向/mnt/hdfs拷貝檔案儲存cp: 無法建立普通檔案: 輸入/輸出錯誤於是,修改hdfs的配置項:dfs.namenode.accesstime.precision將其從預設的0,修改為3600000

IO庫----IO類,檔案輸入輸出,string流

一、IO類   1、IO庫型別和標頭檔案表: 標頭檔案 型別 iostream istream,wistream 從流讀取資料 ostream,wostream 向流寫入資料 iostream,wiostream 讀寫流

檔案輸入輸出流工具: IOUtils使用總結

檔案輸入輸出流工具: IOUtils使用總結 以前寫檔案的複製很麻煩,需要各種輸入流,然後讀取line,輸出到輸出流...其實apache.commons.io裡面提供了輸入流輸出流的常用工具方法,非常方便。下面就結合原始碼,看看IOUTils都有什麼用處吧! 本文系轉載,原作者:xi

C++ 輸入輸出流和檔案輸入輸出

輸出到檔案 #include <iostream> #include <fstream> using namespace std; int i = 100; ofstream file("1.txt"); //檔案輸出物件,檔名