用c語言實現linux 下 touch 命令的操作:
touch:建立檔案或者修改檔案或目錄的時間戳。
實現效果:
可新增三個引數:
-c : --no-create do not create any files 不建立不存在的檔案
-a : change only the access time 只修改檔案的訪問時間
-m : change only the modification time 只修改檔案的修改時間
涉及的函式:
1.getopt()函式:解析命令列引數
/*函式原型*/
#include int getopt(int argc, char * const ar**, const char *optstring);
extern char *optarg;
extern int optind, // 初始化值為1,下一次呼叫getopt時,從optind儲存的位置重新開始檢查選項。
extern int opterr, // 初始化值為1,當opterr=0時,getopt不向stderr輸出錯誤資訊。
extern int optopt; /*當命令列選項字元不包括在optstring中或者選項缺少必
要的引數時,該選項儲存在optopt中, getopt返回'?』。*/
2.open()
int open(constchar*pathname, int flags);
int open(constchar*pathname, int flags, mode_t mode);
作用:開啟和建立檔案。返回值:成功則返回檔案描述符,否則返回 -1。
3.utimensat()
#include int utimensat(int dirfd, const char *pathname,const struct timespec times[2], intflags);
作用:utimensat
是以納秒級的精度改變檔案的時間戳。utimensat()
通過檔案的路徑(pathname
)獲得檔案。
這個系統呼叫函式都是通過乙個時間陣列times
來改變時間戳的,times[0]
修改最後一次訪問的時間(access time),times[1]
修改最後修改的時間 (modify time)。該時間陣列是由秒和納秒兩個部分組成,資料結構如下:
struct timespec ;
當times[x].tv_sec = utime_omit;
相應的時間戳不變,times[x].tv_sec = utime_now;
相應的時間戳變成當前時間
#include#include#include#include#include#include#include#include#include#include#define ch_atime 1
#define ch_mtime 2
/*定義建立檔案時的模式,此處對使用者,組,其他設定的許可權都是可讀可寫的*/
#define mode_rw_ugo (s_irusr | s_iwusr | s_irgrp | s_iwgrp | s_iroth | s_iwoth)
static int change_times;//標誌檔案access time和modify time 的改變情況
static bool no_creat; //如果有(-c) 選項,並且不存在命令列中輸入的檔名,則不建立
static struct timespec newtime[2];//當設定新的access time 和 modify time 的時候使用
static bool mytouch(const char *file)
if(change_times != (ch_atime | ch_mtime))
else
}ok = (utimensat(at_fdcwd,file,newtime,0) == 0);
return false;
}int main(int argc,char **ar**)
} if(change_times == 0)
newtime[0].tv_nsec = utime_now;
newtime[1].tv_nsec = utime_now;
if(optind == argc)
for(;optind < argc; ++optind)
exit(ok ? exit_success : exit_failure);
}
Linux下 C語言編寫 TCP Server
用c寫的,做了函式的封裝,記錄在此,方便查詢 server.h ifndef server h define server h define false 1 define true 0 int server init char server port 伺服器初始化 int wait accept i...
Linux下編寫執行C語言程式
1.gcc 1.c o 1.out 1.out命名 2.gcc lm 1.c a.out使用math.h中宣告的庫函式還有一點特殊之處,gcc命令列必須加 lm選項,因為數學函式位於libm.so庫檔案中 這些庫檔案通常位於 lib目錄下 lm選項告訴編譯器,我們程式中用到的數學函式要到這個庫檔案裡...
Linux下 使用C語言編寫who命令
在linux 下 who命令是查詢當前登入的每個使用者。who的預設輸出包括使用者名稱 終端型別 登入日期及遠端主機。如圖 我們man一下who,在聯機幫助裡可以看到,who命令是讀取 var run utmp檔案來得到以上資訊的。我們在man一下utmp,知道utmp這個檔案,是二進位制檔案,裡面...