Làm cách nào để đặt, đặt lại và kiểm tra "bit dính" từ bên trong chương trình C?Thao tác "bit dính" trong chương trình C
Cảm ơn
Làm cách nào để đặt, đặt lại và kiểm tra "bit dính" từ bên trong chương trình C?Thao tác "bit dính" trong chương trình C
Cảm ơn
Để đọ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.
Đó 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.
Hãy nhìn vào stat (2) - ví dụ http://linux.die.net/man/2/stat tên là 'S_ISVTX' –
@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
@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
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
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. –
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