新聞中心
在Linux系統(tǒng)中,rm命令是一個(gè)非常常用的命令,用于刪除文件或目錄。如果沒(méi)有rm命令,那么Linux系統(tǒng)的使用會(huì)非常不方便。本文將介紹如何使用C語(yǔ)言來(lái)實(shí)現(xiàn)rm命令。

創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的陽(yáng)新網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
一、rm命令的使用
rm命令用于刪除文件或目錄。其基本語(yǔ)法如下:
rm [參數(shù)] 文件或目錄
常用參數(shù)如下:
-r:遞歸刪除目錄及其子目錄;
-f:強(qiáng)制刪除,不提示用戶確認(rèn)。
實(shí)例:
rm filename1:刪除文件filename1
rm –r dirname1:遞歸地刪除目錄dirname1及其所有子目錄和文件
rm –f filename1:強(qiáng)制刪除文件filename1,不需要確認(rèn)
二、實(shí)現(xiàn)rm命令
使用C語(yǔ)言來(lái)實(shí)現(xiàn)rm命令需要使用到兩個(gè)系統(tǒng)調(diào)用,即unlink()和rmdir()。unlink()函數(shù)用于刪除一個(gè)文件,rmdir()函數(shù)用于刪除一個(gè)空目錄。
下面是C語(yǔ)言實(shí)現(xiàn)rm命令的流程:
1.獲取命令行中的文件路徑;
2.使用stat()函數(shù)獲取文件的屬性,并判斷文件是否存在以及是否是目錄;
3.如果是目錄,則使用opendir()函數(shù)打開(kāi)目錄,并使用readdir()函數(shù)讀取目錄下的文件;
4.遞歸地刪除目錄下的所有文件和文件夾;
5.使用unlink()函數(shù)刪除文件或rmdir()函數(shù)刪除空目錄。
下面是一個(gè)簡(jiǎn)單的C語(yǔ)言實(shí)現(xiàn)rm命令的代碼:
“`
#include
#include
#include
#include
#include
#include
// 遞歸地刪除目錄及其子目錄和文件
int rm_dir(const char *dir) {
DIR *dp;
struct dirent *entry;
struct stat statbuf;
if ((dp = opendir(dir)) == NULL) {
fprintf(stderr, “Cannot open directory: %s\n”, dir);
return -1;
}
chdir(dir);// 進(jìn)入目錄
while ((entry = readdir(dp)) != NULL) {
lstat(entry->d_name, &statbuf);// 獲取文件信息
if (S_ISDIR(statbuf.st_mode)) {
if (strcmp(“.”, entry->d_name) == 0 || strcmp(“..”, entry->d_name) == 0) {
continue;
}
rm_dir(entry->d_name);// 遞歸刪除子目錄
} else {
unlink(entry->d_name);// 刪除文件
}
}
closedir(dp);// 關(guān)閉目錄
chdir(“..”);// 退出目錄
rmdir(dir);// 刪除空目錄
return 0;
}
int mn(int argc, char *argv[]) {
int i, ret;
struct stat statbuf;
if (argc
printf(“usage: %s file1 file2 file3 …\n”, argv[0]);
exit(1);
}
for (i = 1; i
if (stat(argv[i], &statbuf)
fprintf(stderr, “Cannot open file: %s\n”, argv[i]);
continue;
}
if (S_ISDIR(statbuf.st_mode)) {
ret = rm_dir(argv[i]);
if (ret == -1) {
fprintf(stderr, “Cannot delete directory: %s\n”, argv[i]);
}
} else {
unlink(argv[i]);
}
}
return 0;
}
“`
三、
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗(yàn)豐富以策略為先導(dǎo)10多年以來(lái)專注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),響應(yīng)式網(wǎng)站制作,設(shè)計(jì)師量身打造品牌風(fēng)格,熱線:028-86922220linux如何使用rm命令快速刪除文件
rm命令用于刪除文件。
命令格式:rm 文件名
常用選項(xiàng):
-f, –force 強(qiáng)制刪除。忽略不存在的文件,不提示確認(rèn)
-i 在刪除前需要確認(rèn)
-r, -R, –recursive 遞歸刪除目錄及其內(nèi)容
-v, –verbose 詳細(xì)顯示進(jìn)行的步驟
默認(rèn)時(shí),rm 不會(huì)刪除目錄。使用–recursive(-r 或-R)選項(xiàng)可刪除每個(gè)給定的目錄,以及其下所有的內(nèi)容。
用法示例:刪除文件名為zhidao.txt的文件
$ rm zhidao.txt
rm -rf xxx 直接刪除文件、文件夾 按Tab鍵可以快速選擇文件
加個(gè)參數(shù)
linux rm命令怎么用
Linux rm命令是用于刪除一個(gè)文件或者目錄的,操作演示:
1、打開(kāi)linux命令行,在上面輸入ls查看當(dāng)前目錄下存在的文件,如下圖可以看到有一個(gè)1.txt
2、輸入rm 1.txt就刪除1.txt這個(gè)文件了
3、再次輸入ls后發(fā)現(xiàn)已經(jīng)看不到之前的1.txt了,說(shuō)明已經(jīng)刪除了
[Linux]編寫(xiě)一個(gè)簡(jiǎn)單的C語(yǔ)言程序,編寫(xiě)Makefile文件。
八 環(huán)境變量
8.1 查看環(huán)境變量
$ env ? 顯示所有的環(huán)境變量設(shè)置
$ echo $ENV_VARIABLE ? 顯示指定環(huán)境變量的設(shè)置
例:
$ echo $PATH
/bin:/etc:/usr/bin:/tcb/bin
8.2 設(shè)定環(huán)境變量
$ ENV_VARIABLE=XXX;export ENV_VARIABLE
例:
$ PATH=$PATH:$INFORMIXDIR/bin;export PATH ? 將環(huán)境變量PATH設(shè)定為原PATH值+$INFORMIXDIR/bin
8.3 取消環(huán)境變量設(shè)置
$ unset $ENV_VARIABLE
例:
$ set GZJ=gzj;export GZJ ? 設(shè)置環(huán)境變量GZJ
$ echo $GZJ
gzj ? 顯示環(huán)境變量值
$ unset $GZJ ? 取消環(huán)境變量GZJ的設(shè)置
$ echo $GZJ
? 已取消
一 makefile規(guī)則
makefile是一個(gè)make的規(guī)則描述腳本文件,包括四種類型行:目標(biāo)行、命令行、宏定義行和make偽指令行(如“include”)。makefile文件中注釋以“#”開(kāi)頭。當(dāng)一行寫(xiě)不下時(shí),可以用續(xù)行符“\”轉(zhuǎn)入下一行。
1.1 目標(biāo)行
目標(biāo)行告訴make建立什么。它由一個(gè)目標(biāo)名表后面跟冒號(hào)“:”,再跟一個(gè)依賴性表組成。
例:
example: depfile deptarget
該目標(biāo)行指出目標(biāo)example與depfile和deptarget有依賴關(guān)系,如果depfile或deptarget有修改,則重新生成目標(biāo)。
example1 example2 example3: deptarget1 deptarget2 depfile
該目標(biāo)行指出目標(biāo)名表中的example1、example2、example3這三個(gè)各自獨(dú)立的目標(biāo)是用相同的依賴列表和規(guī)則生顫激成的。
clean:
空的依賴列表說(shuō)明目標(biāo)clean沒(méi)有其他依賴關(guān)系。
目標(biāo)行后續(xù)的以Tab 開(kāi)始的行是指出目標(biāo)的生成規(guī)則,該Tab字符不能以空格代替。例如:
example.o:example.c example.h
cc –c example.c
該例子指出目標(biāo)example.o依賴于example.c和example.h。如果example.c或example.h其中之一改變了,就需要執(zhí)行命令cc –c example.c重新生成目標(biāo)example.o。
可以用文件名模式匹配來(lái)自動(dòng)為目標(biāo)生成依賴表,如:
prog: *.c
以下是一個(gè)簡(jiǎn)單的makefile的例子:
圖 1 最簡(jiǎn)單的makefile例
make使用makefile文件時(shí),從之一個(gè)目標(biāo)開(kāi)始掃描。上例中的之一個(gè)目標(biāo)為all,所以目標(biāo)clean不會(huì)自動(dòng)被行知執(zhí)行,可以通過(guò)命令make clean來(lái)生成目標(biāo)。
1.2 命令行
命令行用來(lái)定義生成目標(biāo)的動(dòng)作。
在目標(biāo)行中分號(hào)“;”后面的文件都認(rèn)為是一個(gè)命令,或者一行以Tab制表符開(kāi)始的也是命令。
如在上面的makefile例中,第三行以Tab字符開(kāi)始的cc命令即是一個(gè)命令行,說(shuō)明要生成hello應(yīng)執(zhí)行的命令。也可以寫(xiě)成:hello:hello.o;cc –c hello –L…
一般情況下,命令行的命令會(huì)在標(biāo)準(zhǔn)輸出中回顯出來(lái),如對(duì)上面的makefile執(zhí)行make時(shí),標(biāo)準(zhǔn)輸出如下:
cc -c hello.c
cc -o hello -L/usr/X11R6/lib -L/usr/lib -lXm -lXt -lX11 hello.o
cc -c hello1.c
cc -o hello1 -L/usr/X11R6/lib -L/usr/lib -lXm -lXt -lX11 hello1.o
如果不希望命令本身回顯,可在命令前加@字符,如在上例中不希望回顯cc –c hello.c和cc –c hello1.c,可修改makefile文件如下:
圖 2 抑制回顯的makefile例
對(duì)該makefile文件執(zhí)行make時(shí),標(biāo)準(zhǔn)輸出如下:
cc -o hello -L/usr/X11R6/lib -L/usr/lib -lXm -lXt -lX11 hello.o
cc -o hello1 -L/usr/X11R6/lib -L/usr/lib -lXm -lXt -lX11 hello1.o
可以看出,命令行前有@字符的不回顯。
1.3 宏定義茄帶襪行
在makefile中,可以使用宏定義減少用戶的輸入,例如上例中對(duì)hello和hello1的編譯選項(xiàng)均為“-L/usr/X11R6/lib -L/usr/lib -lXm -lXt -lX11”,此時(shí)可以用宏來(lái)代替,如:
圖 3 使用宏定義的makefile例
宏定義的基本語(yǔ)法是:
name=value
在定義宏時(shí),次序不重要。宏不需要在使用前定義。如果一個(gè)宏定義多次,則使用最后一次的定義值。
可以使用“$”字符和“()”或“{}”來(lái)引用宏,例如:
cc –o hello.o $(CCFLAGS) hello.o
也可以將一個(gè)宏賦值給另一個(gè)宏,但這樣的定義不能循環(huán)嵌套,如:
A=value1
B=value2
C=$(A) $(B)等價(jià)于C=value1 value2
1.4 偽指令
makefile大部分由宏定義行、命令行和目標(biāo)行組成。第四種類型是make偽指令行。make偽指令沒(méi)有標(biāo)準(zhǔn)化,不同的make可能支持不同的偽指令集,使得makefile有一定的不兼容性。如果要考慮移植性問(wèn)題,則要避免使用make偽指令。但有一些偽指令,如include,由于使用比較多,很多不同make都提供該偽指令。
1.4.1 偽指令include
該偽指令類似C語(yǔ)言中的#include,它允許一次編寫(xiě)常用的定義并包括它。include偽指令必須在一行中,之一個(gè)元素必須是include,并且跟一個(gè)要包含的文件名,如:
include default.mk
1.4.2 偽指令“#”
“#”字符也是make的偽指令,它指出“#”后面的文件是注釋,如:
PROGNAME=test # define macro
#don’t modify this
二 后綴規(guī)則
2.1 雙后綴規(guī)則
在前面的makefile例中有許多重復(fù)內(nèi)容,例如,生成hello和hello1的命令類似,生成hello.o和hello1.o的命令也類似,除了編譯或鏈接的文件不一樣外,其它均相同,這時(shí),我們就可以使用后綴規(guī)則。首先看一個(gè)雙后綴的例子:
圖 4 使用雙后綴規(guī)則的makefile例
后綴規(guī)則使用特殊的目標(biāo)名“.SUFFIXES”。
之一行中.SUFFIXES的依賴表為空,用來(lái)清除原有的后綴規(guī)則,因?yàn)?SUFFIXES可以在makefile中多次使用,每一次都將新的后綴規(guī)則加入以前的后綴規(guī)則中。
第二行中指定后綴規(guī)則為“.c .o”,即表示將所有的.c文件轉(zhuǎn)換為.o文件。
第三行指定將.c文件轉(zhuǎn)換成.o文件的方法。$(CC)為make的預(yù)定義宏,其默認(rèn)值為cc,$
#include
MODULE_LICENSE(“Dual BSD/GPL”);
static int hello_init(void)
{
printk(KERN_ALERT “Hello, world\n”);
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT “Goodbye, cruel world\n”);
}
module_init(hello_init);
module_exit(hello_exit);
makefile:
# If KERNELRELEASE is defined, we’ve been invoked from the
# kernel build system and can use its language.
ifneq ($(KERNELRELEASE),)
obj-m := hello.o
# Otherwise we were called directly from the command
# line; invoke the kernel build system.
else
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif
這個(gè)已經(jīng)通過(guò)調(diào)試了!
//calculate.h
#ifndef DEFCALCULATE_H
#define DEFCALCULATE_H
#include
#include
#include
#include
using namespace std;
// =========================================================================
// = 一些標(biāo)志,如數(shù)字、+-*/()
enum Token_value
{
NAME,
NUMBER,
END,
PLUS=’+’,
MINUS=’-‘,
MUL=’*’,
DIV=’/’,
PRINT=’;’,
ASSIGN=’=’,
LP='(‘,
RP=’)’
};
//#############################################################################
//#############################################################################
double term(bool); //乘法
double prim(bool); //處理初等項(xiàng)
double error(const string&); //錯(cuò)誤函數(shù)羨雀
Token_value get_token(); //輸入
double expr(bool get); //加和減
//#############################################################################
//#############################################################################
extern double number_value; /寬殲/
extern string string_value; //
extern Token_value curr_tok; //當(dāng)前操作標(biāo)志
extern map table;//
extern int no_of_errors; //
#endif
//慎派沖winconsole.cpp
#include “calculate.h”
#include
istream* input;
int main()
{
//switch(argc)
//{
//case 1:
input=&cin;
// break;
//case 2:
// input=new istringstream(argv);
// break;
//default:
// error(“too many arguments”);
// return 1;
//}
table=3.14159;
table=2.718182;
while (*input)
{
get_token();
if (curr_tok==END)
{
break;
}
if (curr_tok==PRINT)
{
continue;
}
cout>ch;
switch(ch)
{
case 0:
return curr_tok=END;
case ‘;’:
case ‘*’:
case ‘/’:
case ‘+’:
case ‘-‘:
case ‘(‘:
case ‘)’:
case ‘=’:
return curr_tok=Token_value(ch);
case ‘0’:case ‘1’:case ‘2’:case ‘3’:case ‘4’:
case ‘5’:case ‘6’:case ‘7’:case ‘8’:case ‘9’:
case ‘.’:
cin.putback(ch);
cin>>number_value;
return curr_tok=NUMBER;
default:
if (isalpha(ch))
{
cin.putback(ch);
cin>>string_value;
return curr_tok=NAME;
}
error(“bad token”);
return curr_tok=PRINT;
}
}
//prim.cpp
#include “calculate.h”
double number_value;
string string_value;
map table;
double prim(bool get)
{
if (get)
{
get_token();
}
switch(curr_tok)
{
case NUMBER:
{
double v=number_value;
get_token();
return v;
}
case NAME:
{
double& v=table;
if (get_token()==ASSIGN)
{
v=expr(true);
}
return v;
}
case MINUS:
{
return -prim(true);
}
case LP:
{
double e=expr(true);
if (curr_tok!=RP)
{
return error(“)expected”);
}
get_token();
return e;
}
default:
return error(“primary expected”);
}
}
//term.cpp
#include “calculate.h”
double term(bool get)
{
double left=prim(get);
for (;;)
{
switch(curr_tok)
{
case MUL:
left*=prim(true);
break;
case DIV:
if (double d=prim(true))
{
left/=d;
break;
}
return error(“divide by 0”);
default:
return left;
}
}
}
//makefile
objects = error.o expr.o get_token.o prim.o term.o winconsole.o
calculate:$(objects)
g++ -Wall -g -o calculate $(objects)
$(objects) : %.o : %.cpp
g++ -c $(CXXFLAGS) $
關(guān)于linux c語(yǔ)言實(shí)現(xiàn)rm的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
成都創(chuàng)新互聯(lián)科技公司主營(yíng):網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、小程序制作、成都軟件開(kāi)發(fā)、網(wǎng)頁(yè)設(shè)計(jì)、微信開(kāi)發(fā)、成都小程序開(kāi)發(fā)、網(wǎng)站制作、網(wǎng)站開(kāi)發(fā)等業(yè)務(wù),是專業(yè)的成都做小程序公司、成都網(wǎng)站建設(shè)公司、成都做網(wǎng)站的公司。創(chuàng)新互聯(lián)公司集小程序制作創(chuàng)意,網(wǎng)站制作策劃,畫(huà)冊(cè)、網(wǎng)頁(yè)、VI設(shè)計(jì),網(wǎng)站、軟件、微信、小程序開(kāi)發(fā)于一體。
標(biāo)題名稱:Linux與C語(yǔ)言實(shí)現(xiàn)rm命令(linuxc語(yǔ)言實(shí)現(xiàn)rm)
文章轉(zhuǎn)載:http://m.fisionsoft.com.cn/article/dpcehjd.html


咨詢
建站咨詢
