Hàm Fstat trong C

Ham Fstat Trong C



Hàm fstat () gọi hệ thống trả về thông tin (liên quan đến một số tệp) phụ thuộc vào bộ mô tả của tệp đó. Hàm này lấy thông tin cho tệp được liên kết với bộ mô tả tệp còn được gọi là “bộ lọc” và sau đó ghi thông tin này vào vị trí bộ nhớ nơi bộ đệm trỏ tới. Kiểu trả về của hàm này là một số nguyên. Nó trả về giá trị “0” nếu chương trình được thực thi thành công. Nếu không, nó trả về “-1” cho hàm trong trường hợp thực thi không thành công. Lỗi thực thi cho hàm này có thể do một số lý do cụ thể như nếu các bộ lọc của hàm có bộ mô tả không hợp lệ cho tệp, nếu lỗi đọc cho đầu vào và đầu ra xảy ra từ tệp và nếu vị trí bộ nhớ (cấu trúc) ở đâu bộ đệm đang trỏ để ghi thông tin tệp không có đủ bộ nhớ được cấp phát cho kích thước tệp.

Thủ tục

Bài viết này tuân theo thứ tự tuần tự để thực hiện hàm fstat () để lấy thông tin tệp. Đầu tiên chúng ta tìm hiểu cú pháp của hàm này, các tham số cần thiết cho hàm này. Sau đó, chúng tôi sử dụng cú pháp này để thực thi một số ví dụ cho hàm fstat ().







Cú pháp

Phương thức khai báo hàm fstat () cho phép chương trình truy cập vào thông tin tệp được đề cập trong dòng sau:



$ #include
$ int tiểu bang ( int fildes , cấu trúc chỉ số * buf ) ;

Bất cứ khi nào chúng ta phải gọi hàm trong chương trình của mình, trước tiên chúng ta phải nhập các tệp tiêu đề hỗ trợ hàm này dưới dạng “sys / stat.h”. Kiểu trả về cho hàm luôn là “int” và tham số bao gồm “fildes” với kiểu dữ liệu là “int”. Fildes là một bộ mô tả cho tệp mà chúng tôi muốn biết thông tin. Một tham số khác được cung cấp cho hàm là con trỏ “buf”. Nó là một con trỏ 'struct stat' trỏ tới cấu trúc mà chúng ta muốn lưu trữ dữ liệu về tệp. Đây là mô tả ngắn gọn về các tham số đầu vào cho hàm fstat ().



Thí dụ

Chúng tôi sử dụng mô tả được đề cập trước đây và thực thi một chương trình để lấy thông tin về bất kỳ / tệp cụ thể nào thông qua chương trình của chúng tôi. Chúng tôi viết chương trình này trong trình biên dịch Microsoft Visual Studio C để thực thi. Chúng ta bắt đầu với ví dụ bằng cách tạo một dự án trước rồi thêm nó vào kho C trong Visual Studio. Để thêm dự án vào các tệp C, chúng tôi bao gồm “.c” với tên dự án và thêm nó vào tệp nguồn của dự án. Bước tiếp theo sau khi tạo dự án là gọi tất cả các thư viện cần thiết cho các chức năng mà chúng ta có thể sử dụng sau này trong chương trình. Vì chúng tôi đang triển khai ví dụ cho hàm fstat () trong bài viết này, chúng tôi phải bao gồm tệp tiêu đề “sys / stat.h”. Đối với thông tin tệp, chúng ta cần biết loại thiết bị nơi tệp tồn tại. Để biết loại dữ liệu cho thiết bị, chúng tôi đưa vào tiêu đề “loại. h ”trong chương trình.





Thông tin tệp phải bao gồm thời gian tệp được mở lần cuối và sửa đổi được thực hiện trong đó. Để truy cập các hàm gọi thời gian này, chúng tôi thêm tệp tiêu đề “times. h ”và“ fcntl. tiêu đề h ”cho các chức năng cấp quyền tệp. Tiêu đề cuối cùng “stdio. tệp h ”cũng được bao gồm trong chương trình để gọi các phương thức printf () và scanf () trong chương trình. Các tệp tiêu đề mà chúng ta đã thảo luận để được đưa vào chương trình như sau:

$ #include
$ #include
$ #include
$ #include
$ #include

Sau khi các tệp tiêu đề được đề cập trước đó được nhập thành công vào chương trình, bây giờ chúng ta xây dựng chương trình để lấy thông tin về một tệp cụ thể. Chúng ta khai báo hàm có kiểu trả về là “int” với tên là “main”. Trong hàm chính này, chúng ta khai báo một mảng “char” và gán cho nó tên của tệp mà chúng ta cần biết thông tin. Sau đó, chúng tôi xác định “thông tin thống kê” với kiểu dữ liệu “cấu trúc”. Cấu trúc này là nơi chúng tôi lưu trữ thông tin về tệp.



Sau đó, chúng tôi xác định một biến khác với tên “file_descriptor” với kiểu dữ liệu là “số nguyên”. Trong “điều kiện if”, chúng tôi yêu cầu quyền cho các hoạt động đọc và ghi cho tệp nếu nó tồn tại, chuyển “S_IWUSR” và tên của mảng tới hàm “create ()” để gọi các quyền cho tệp nếu nó tồn tại hoặc tạo một tệp mới. Chúng ta chuyển hàm create () này cho 'if condition', trong đó chỉ ra rằng nếu giá trị của hàm create () nhỏ hơn 0 thì sẽ tạo ra một lỗi mà tệp cần được tạo. Nếu fstat () với các tham số là “file_descriptor” và “information” và “địa chỉ của vị trí lưu trữ thông tin tệp” không bằng 0, chúng tôi hiển thị giá trị trả về fstat () là thông tin của tệp . Và chúng tôi in thông tin dưới dạng thuộc tính, ví dụ: id thiết bị mà tệp được lưu trữ, số Inode của thiết bị, chế độ bảo vệ của tệp, id người dùng, id nhóm và số liên kết (dạng cứng).

Sau khi hiển thị các thuộc tính này, chúng tôi thoát ra khỏi các câu lệnh và đóng tệp bằng phương thức close (). Sau đó, hủy liên kết tệp bằng cách gọi phương thức unlink ().

#include
#include
#include
#include
#include

chính ( ) {
char mảng [ ] = 'amp.file' ;
cấu trúc thông tin thống kê ;
int người viết thư ;
nếu ( ( người viết thư = thực hiện ( mảng , S_IWUSR ) ) < 0 )
kẻ gian tà ( 'lỗi tạo ()' ) ;
khác {
nếu ( tiểu bang ( người viết thư , & thông tin ) ! = 0 )
kẻ gian tà ( 'lỗi fstat ()' ) ;
khác {
đặt ( 'giá trị fstat ():' ) ;
printf ( 'inode:% d \N ' , ( int ) thông tin. st_ino ) ;
printf ( 'device_id:% d \N ' , ( int ) thông tin. st_dev ) ;
printf ( 'chế độ của thiết bị:% 08x \N ' , thông tin. st_mode ) ;
printf ( 'no_of_hard_links:% d \N ' , thông tin. st_nlink ) ;
printf ( 'u_id:% d \N ' , ( int ) thông tin. st_uid ) ;
printf ( 'g_id:% d \N ' , ( int ) thông tin. st_gid ) ;
}
gần ( người viết thư ) ;
hủy liên kết ( mảng ) ;
}
}

Đầu tiên, chương trình sẽ truy cập quyền cho hoạt động tệp, sau đó đọc dữ liệu trong đó và ghi vào vị trí bộ nhớ được cấp phát. Các thuộc tính mà chúng tôi đã cung cấp cho chương trình để hiển thị từ tệp được hiển thị trong đầu ra.

Sự kết luận

Chúng tôi đã sử dụng hàm fstat () để truy cập thông tin tệp. Đầu tiên chúng ta đã học cú pháp cho hàm fstat () được giải thích với mô tả đầy đủ về các tham số của hàm. Sau đó, chúng tôi đã viết một chương trình cho chức năng này, nơi chúng tôi truy cập vào quyền của chủ sở hữu tệp trước tiên, sau đó đọc tệp và hiển thị các thuộc tính mà chúng tôi muốn từ thông tin của tệp. Chúng tôi đã cố gắng hết sức để bạn hiểu khái niệm về fstat () và chúng tôi hy vọng rằng nó sẽ giúp ích cho bạn trong các chương trình của mình.