2011-07-09 43 views

Trả lời

10

Để đọc các bit dính bạn sử dụng stat() kiểm tra các .st_mode cho S_ISVTX

#include <unistd.h> 
#include <sys/types.h> 
#include <sys/stat.h> 

struct stat file_stats; 
stat("my_file", &file_stats); 
if (file_stats.st_mode & S_ISVTX) 
    printf("sticky\n"); 

để thiết lập lại nó, bạn làm điều đó thông qua chmod

struct stat file_stats; 
stat("my_file", &file_stats); 
mode_t new_mode = file_stats.st_mode & ~S_ISVTX; 
chmod("my_file", new_mode); 

để thiết lập nó, chmod nó là

struct stat file_stats; 
stat("my_file", &file_stats); 
mode_t new_mode = file_stats.st_mode | S_ISVTX; 
chmod("my_file", new_mode); 

th là mã chưa được kiểm tra.

trang người đàn ông: stat(2)chmod(2)

+0

Nói đúng, điều này cũng cố gắng thiết lập các bit "loại tệp" bằng cách sử dụng 'chmod', mà tôi tin là không được phép ... Cũng lưu ý rằng mã này là không phù hợp; ví dụ. nếu tập tin của bạn bị xóa và thay thế giữa cuộc gọi đến 'stat()' và cuộc gọi đến 'chmod()'. (Một lý do 'fstat' và' fchmod' có lẽ tốt hơn; cái kia là hiệu năng ...) – Nemo

+0

Bạn có chắc chắn chmod cố gắng thiết lập bit "loại tệp", bất kể chúng là gì? Ngoài ra, nếu bạn đang kiểm tra các tập tin bị xóa giữa các cuộc gọi, bạn cũng nên kiểm tra cuộc khủng hoảng hạt nhân giữa các cuộc gọi. –

+0

Trường 'st_mode' của' struct stat' bao gồm các bit "loại tệp" (tệp thông thường so với thư mục so với ổ cắm vv) ngoài các quyền. Và bạn không thể đặt chúng bằng 'chmod', vì vậy bạn có thể gặp lỗi nếu bạn thử. Và nếu bạn không nghĩ rằng đáng lo ngại về điều kiện chủng tộc liên quan đến việc tạo/xóa tập tin trên Unix, tôi có một số lời khuyên CERT để chỉ cho bạn ... – Nemo

1

Đó là chút 01.000 (bát phân), do đó bạn có thể thiết lập nó với chmod(dir, 01000 | perms). Tôi chắc chắn nếu bạn poke xung quanh các tiêu đề, có thể stat.h, bạn sẽ tìm thấy tên chính xác cho bit.

+1

Hãy nhìn vào stat (2) - ví dụ http://linux.die.net/man/2/stat tên là 'S_ISVTX' –

+0

@mru: Trên thực tế, và nó cũng là một phần của [tiêu chuẩn POSIX] (http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_stat.h.html). – Nemo

+1

@jcomeau: Người hỏi cũng hỏi làm thế nào để "kiểm tra" bit, vì vậy bạn có thể muốn đề cập đến 'stat' hoặc' fstat', cũng vậy. – Nemo

Các vấn đề liên quan