我試圖做的是創建一個文件腳本中使用的ioctl(),然後將其設置爲不可變的類似於linux下chattr +i
命令。 腳本編譯(與海灣合作委員會),運行和文件被創建。然而,文件本身並不是一成不變的,可以用一個簡單的rm -f
除去。我試圖堆棧跟蹤chattr
被調用,並且我找到了一個叫ioctl
的函數。然後,我使用了我可以收集的一些小信息,並提出了下面的內容。我從ext2_fs.h
縮小了它,但它似乎並不工作。我顯然忽略了一些東西。設置不可變的標誌用C
更新一個條目:編譯但返回-1的ioctl()函數。 錯誤地址與perror()一起顯示。
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <linux/fs.h>
int main()
{
FILE *fp;
char shovel[16] = "I have a shovel!";
fp = fopen("/shovel.txt", "w+");
fwrite(shovel, sizeof(shovel[0]), sizeof(shovel)/sizeof(shovel[0]), fp);
ioctl(fileno(fp), FS_IOC_SETFLAGS, 0x00000010);
fclose(fp);
}
任何幫助表示讚賞。
爲什麼你認爲'ioctl'成功?怎麼樣測試返回值? – Jens
你是否以root身份運行? –
是的,以根用戶身份運行並且返回值爲-1 – user2425108