黑馬《linux基礎程式設計》學習筆記(76到80)
阿新 • • 發佈:2018-12-29
七十六. 非阻塞讀終端
#include <unistd.h> #include <fcntl.h> #include <errno.h> #include <string.h> #include <stdlib.h> #include <stdio.h> #define MSG_TRY "try again\n" // 非阻塞讀終端 int main(void) { char buf[10]; int fd, n; // /dev/tty --> 當前開啟的終端裝置 fd = open("/dev/tty", O_RDONLY | O_NONBLOCK); if(fd < 0) { perror("open /dev/tty"); exit(1); } tryagain: n = read(fd, buf, 10); if (n < 0) { // 如果write為非阻塞,但是沒有資料可讀,此時全域性變數 errno 被設定為 EAGAIN if (errno == EAGAIN) { sleep(3); write(STDOUT_FILENO, MSG_TRY, strlen(MSG_TRY)); goto tryagain; } perror("read /dev/tty"); exit(1); } write(STDOUT_FILENO, buf, n); close(fd); return 0; }
七十七. stat函式介紹
七十八. 使用stat函式獲取檔案大小
#include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> int main(int argc, char* argv[]) { struct stat buf_st; int ret = stat("english.txt", &buf_st); if(ret == -1) { perror("stat error"); exit(1); } printf("file size = %d\n", (int)buf_st.st_size); return 0; }
執行一下
[[email protected]_0_15_centos file_op]# gcc size_stat.c -o size_stat [[email protected]_0_15_centos file_op]# ls access.c chown.c ls-l.c rename.c size_stat.c strtol.c chmod.c english.txt newstat size_stat stat.c truncate.c [[email protected]_0_15_centos file_op]# ./size_stat file size = 109055
七十九. st_mode如何獲取檔案型別和許可權
八十. st_mode如何獲取檔案型別和許可權——程式碼
首先是type_stat.c
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
struct stat buf_st;
int ret = stat("english.txt", &buf_st);
if(ret == -1)
{
perror("stat error");
exit(1);
}
if((buf_st.st_mode & S_IFMT) == S_IFREG)
{
printf("這個檔案是一個普通檔案\n");
}
return 0;
}
然後執行一下
[[email protected]_0_15_centos file_op]# vim type_stat.c
[[email protected]_0_15_centos file_op]# gcc type_stat.c -o type_stat
[[email protected]_0_15_centos file_op]# ls
access.c chown.c ls-l.c rename.c size_stat.c strtol.c type_stat
chmod.c english.txt newstat size_stat stat.c truncate.c type_stat.c
[[email protected]_0_15_centos file_op]# ./type_stat
這個檔案是一個普通檔案
然後接下來我們處理的是檔案許可權的檢視。
先是mode_stat.c
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
struct stat buf_st;
int ret = stat("english.txt", &buf_st);
if(ret == -1)
{
perror("stat error");
exit(1);
}
//所有者對檔案的操作許可權
if(buf_st.st_mode & S_IRUSR)
{
printf(" r");
}
if(buf_st.st_mode & S_IWUSR)
{
printf(" w");
}
if(buf_st.st_mode & S_IXUSR)
{
printf(" x");
}
return 0;
}
執行
[[email protected]_0_15_centos file_op]# vim mode_stat.c
[[email protected]_0_15_centos file_op]# gcc mode_stat.c -o mode_stat
[[email protected]_0_15_centos file_op]# ls
access.c english.txt mode_stat.c size_stat strtol.c type_stat.c
chmod.c ls-l.c newstat size_stat.c truncate.c
chown.c mode_stat rename.c stat.c type_stat
[[email protected]_0_15_centos file_op]# ./mode_stat