1. 程式人生 > >玩玩linux下的access函式---探測檔案/目錄許可權

玩玩linux下的access函式---探測檔案/目錄許可權

       access函式用來探測檔案/目錄許可權, 我們先來看程式:

#include <stdio.h>
#include <unistd.h>

int main()
{
	char szTest[][100] =
	{
		"ls",
		"touch test",  // 此時, test是檔案
		"chmod u-rwx test",
		"chmod u+r test",
		"chmod u+w test",
		"chmod u+x test",
	};
	
	int i = 0;
	int n = sizeof(szTest) / sizeof(szTest[0]);
	for(i = 0; i < n; i++)
	{
		system(szTest[i]);
		
		if(1 == i)
		{
			continue;	
		}
		
		if(access("test", F_OK) < 0)
		{
			perror("e0");
		}
		else
		{
			printf("file ok\n");
		}
		
		if(access("test", R_OK) < 0)
		{
			perror("e1");
		}
		else
		{
			printf("read ok\n");
		}

		if(access("test", W_OK) < 0)
		{
			perror("e2");
		}
		else
		{
			printf("write ok\n");
		}
		
		if(access("test", X_OK) < 0)
		{
			perror("e3");
		}
		else
		{
			printf("exec ok\n");
		}
	}
	
	return 0;
}
      結果為:
 [[email protected] learn_c]$ ls
test.c
[[email protected] learn_c]$ gcc test.c 
[[email protected] learn_c]$ ./a.out 
a.out  test.c
e0: No such file or directory
e1: No such file or directory
e2: No such file or directory
e3: No such file or directory
file ok
e1: Permission denied
e2: Permission denied
e3: Permission denied
file ok
read ok
e2: Permission denied
e3: Permission denied
file ok
read ok
write ok
e3: Permission denied
file ok
read ok
write ok
exec ok
[
[email protected]
 learn_c]$ 

        我們再來看目錄, 程式碼如下:

#include <stdio.h>
#include <unistd.h>

int main()
{
	char szTest[][100] =
	{
		"ls",
		"mkdir test",  // 此時, test是目錄, 不再是"touch test"生成的檔案
		"chmod u-rwx test",
		"chmod u+r test",
		"chmod u+w test",
		"chmod u+x test",
	};
	
	int i = 0;
	int n = sizeof(szTest) / sizeof(szTest[0]);
	for(i = 0; i < n; i++)
	{
		system(szTest[i]);
		
		if(1 == i)
		{
			continue;	
		}
		
		if(access("test", F_OK) < 0)
		{
			perror("e0");
		}
		else
		{
			printf("directory ok\n");
		}
		
		if(access("test", R_OK) < 0)
		{
			perror("e1");
		}
		else
		{
			printf("read ok\n");
		}

		if(access("test", W_OK) < 0)
		{
			perror("e2");
		}
		else
		{
			printf("write ok\n");
		}
		
		if(access("test", X_OK) < 0)
		{
			perror("e3");
		}
		else
		{
			printf("exec ok\n");
		}
	}
	
	return 0;
}
      結果為:  [[email protected] learn_c]$ ls
test.c
[[email protected] learn_c]$ gcc test.c 
[[email protected] learn_c]$ ./a.out 
a.out  test.c
e0: No such file or directory
e1: No such file or directory
e2: No such file or directory
e3: No such file or directory
directory ok
e1: Permission denied
e2: Permission denied
e3: Permission denied
directory ok
read ok
e2: Permission denied
e3: Permission denied
directory ok
read ok
write ok
e3: Permission denied
directory ok
read ok
write ok
exec ok
[[email protected] learn_c]$ 

      

      不消多說。

相關推薦

玩玩linuxaccess函式---探測檔案/目錄許可權

       access函式用來探測檔案/目錄許可權, 我們先來看程式: #include <stdio.h> #include <unistd.h> int main(

Linuxselect函式檔案描述符0狀態的問題

當然是在有輸入或者輸出時檔案描述符的讀寫狀態改變咯,比如標準輸入的檔案描述符是0,如果用select來等待0號檔案描述符,那麼當在鍵盤上敲字元時開始,就是檔案描述符的讀寫狀態改變之時,這時select函式就會返回;對於套接字描述符來說也是這樣,用select來等待一個伺服器描

軟體素材---linux C語言:linux獲取可執行檔案的絕對路徑--getcwd函式

      //標頭檔案:#include <unistd.h>     //定義函式:char * getcwd(char * buf, size_t size);    

linux遞迴查詢某目錄所有檔案包含某字串的命令

linux下查詢某目錄下所有檔案包含某字串的命令: 從檔案內容查詢匹配指定字串的行: $ grep "被查詢的字串" 檔名 從檔案內容查詢與正則表示式匹配的行: $ grep –e “正則表示式” 檔名 查詢時不區分大小寫: $ grep –i "被查詢的字串"

linux常用小技巧--查詢目錄是否存在特定內容的檔案

使用find命令查詢某個目錄下所有檔案(包括子目錄)中是否包含指定內容 find . -type f|xargs grep -e "需要包含的字元" 這樣就能查詢該目錄下所有包含該字元的檔案內容了,同時也會顯示出該內容所在檔案的位置和檔名。

Linux編譯多個不同目錄檔案以及靜態庫、動態庫的使用

先看兩篇博文,作為基礎知識。如果對C/C++編譯連結過程都瞭解的話,可以跳過不看。一、  編譯不同目錄下的多個檔案各個檔案的佈局如下:       head.h檔案的程式碼:#ifndef  HEAD_H#define  HEAD_Hint add(int a, int b);  #endif  /*HEAD

Linux 獲取當前路徑所有目錄大小並排序

目錄排序 大小排序日常工作中,會遇到一堆目錄,如何查看各目錄大小呢,大家都知道du命令先列出前10條[email protected]/* */ /scripts]#du -sh * | head 120K 2017031510 248K 2017031514 23M 2017031515 664

Linux對文件或者目錄進行打包壓縮

linux下 file clip ont ocl str http ron pbo 一、壓縮命令[compress/gzip/bzip2]: 壓縮只能對文件,不能對目錄,目錄要先打包,然後再壓縮。 (1)compress (2)gzip 1、壓縮文件 [c

Linux的文件與目錄權限

img 選項 有時 oot oop 字符 設備 可執行 使用命令 一、用戶(User)、群組(Group)和其他人(Others) linux是多用戶多任務的操作系統,同一時刻可能會有多個用戶登錄系統,考慮到文件的安全性等問題,所以Linux下的文件都屬於一個特定的用戶(

linux的文件及目錄介紹

什麽 用戶組 登錄 日誌文件 應用 比較 頻繁 用戶管理 統一 FHS(英文:Filesystem Hierarchy Standard 中文:文件系統層次結構標準),多數 Linux 版本采用這種文件組織形式,FHS 定義了系統中每個區域的用途、所需要的最小構成的文件和目

c語言實現linux高危函式system (簡易V1.0版本)

system這個函式真的是要慎用,一不小心就會留下漏洞。 下面是用c語言簡易的實現了一下system函式 #include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<err

linux常用標頭檔案

#include <linux/***.h> 是在linux-2.6.29/include/linux下面尋找原始檔。 #include <asm/***.h> 是在linux-2.6.29/arch/arm/include/asm下面尋找原始檔。 #in

Linuxgetopt()函式的使用

Linux下getopt()函式的簡單使用 步入正題: 我們的主角----getopt()函式。 英雄不問出處,getopt()函式的出處就是unistd.h標頭檔案(哈哈),寫程式碼的時候千萬不要忘記把他老人家include上。   再來看一下這傢伙的原型(不是六耳獼

LinuxJava執行.class檔案,報錯找不到或無法載入主類

classpath配置的錯誤,所以找不到.class檔案。 原先的etc/profile中的classpath配置 export CLASSPATH=$JAVA_HOME/lib/tools.jar   更改後的: export CLASSPATH=.:$JAVA_HOME

linux批量重新命名檔案

假設資料夾Data裡有幾個資料資料夾, 每個資料資料夾內有多個數據檔案,該檔名稱格式為: 2014.143.20.49.21.0000.YN.BAS.00.BHE.M.SAC 現想要將這些檔名稱改為BAS.E.SAC, 即取原檔名的幾列重新命名,方法如下: #!/bin/bash #將資料檔

解決Linux root使用者刪除檔案提示:Operation not permitted

問題描述 用最高許可權rm檔案,居然報錯Operation not permitted。檢視許可權也沒有問題。可想而知有可能檔案被保護了。用命令lsattr檢查一下就知道。 [[email protected] root]# lsattr a.txt   ---i---------- a.

Linuxtime函式

Linux下time函式都在time.h標頭檔案中。 1、標頭檔案 和時間有關的標頭檔案有以下幾個: time.h sys/time.h sys/times.h sys/timeb.h sys/timex.h time.h是C標準庫的標頭檔案,其餘sys開頭的都是Linux系統自己的標頭檔

對於linuxsystem 函式的深度理解 整理

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Linux,grep獲取檔案中的最後一次匹配項

如題:使用grep獲取檔案中的最後一次匹配項 grep '查詢的內容' -A 100 檔名 | tail -n 101 grep獲取檔案中的最後一次匹配項,以及後面100行, 注意是tail -n 101而不是tail -n 100,因為tail -n 100將不會顯示匹配內

Linux校驗下載檔案的完整性(MD5,SHA1,PGP)

  原文:https://www.cnblogs.com/Alight/p/4104070.html 檢視: Linux下校驗下載檔案的完整性(MD5,SHA1,PGP) http://blog.useasp.net/archive/2014/03/29/use-md5-sha1-or-pg