- 论坛徽章:
- 0
|
目录是文件,用来保存其他文件的节点号和名字
cd ~user:可以进入user的主目录
/dev/null:
写向该设备的输出被丢弃,读该设备会立刻返回一个文件结束符
创建空文件:
cp /dev/null empty_file
touch:
改变文件的修改时间,并不会把有内容的文件变成空文件
块设备是那些支持随即文件系统存取的设备,例如磁盘
库函数为了解决底层系统调用的低效率问题
open给出的模式值将与用户掩码(umask)的反值做AND操作。
strerror:(见apue p11)
#include
char *strerror(int errnum);
strerror将errnum(通常是errno)映射为一个出错字符串,并返回此 字符串的指针。
XSI: X/Open System Interface,X/Open系统接口
创建临时文件的技巧:
先open创建一个文件,然后调用unlink。
如何在linux下使用c语言操作临时文件
unlink函数删除文件的目录入口,所以临时文件还可以通过文件描述符进 行访问,直到最后一个打开的进程关闭文件操作符,或者程序退出后临时文 件被自动彻底地删除。
/proc文件系统:
linux提供一个特殊的文件系统procfs,通常表现为/proc.
cat /proc/cpuinfo
cat /proc/meminfo
cat /proc/version
cat /proc/net/sockstat
cat /proc/sys/fs/file-max
改变最多同时能打开的文件数:
echo 60000 > /proc/sys/fs/file-max
4 0 16828 16823 15 0 4660 1480 wait Ss pts/1 0:00 bash
[root@localhost chap3]# ls /proc/16828
attr coredump_filter environ limits maps mountstats root stat task
auxv cpuset exe limits mem oom_adj schedstat statm wchan
cmdline cwd fd loginuid mounts oom_score smaps status
[root@localhost chap3]# cat /proc/16828/cmdline
bash[root@localhost chap3]# od /proc/16828/cmdline
0000000 060542 064163 000000
0000005
[root@localhost chap3]# od -c /proc/16828/cmdline
0000000 b a s h \0
0000005
[root@localhost chap3]# ls /proc/16828/fd
0 1 2 255
目录扫描程序
#include
#include
#include
#include
#include
#include
/* 伪代码
* depthfirst(root)
* {
* for each node at or below root
* visit node;
* if node is a directory
* depthfirst(node);
* }
*/
void
printdir(char *dir, int depth)
{
DIR *dp; /* 目录流 */
struct dirent *entry; /* dirent结构体 */
struct stat statbuf; /* 用于返回通过文件名查到的文件状态信息 */
/* 打开目录,并创建目录流 */
if ((dp = opendir(dir)) == NULL)
{
fprintf(stderr, "opendir %s error\n", dir);
return;
}
chdir(dir);
/* 循环读目录 */
while ((entry = readdir(dp)) != NULL)
{
lstat(entry->d_name, &statbuf); /* 获取文件状态信息 */
if (S_ISDIR(statbuf.st_mode))/* 如果是目录,则递归; 如果是文件,则打印名字*/
{
if (strcmp(".", entry->d_name) == 0
|| strcmp("..", entry->d_name) == 0)
continue;
printf("%*s%s/\n", depth, " ", entry->d_name); /* 打印目录名 */
/* 递归 */
printdir(entry->d_name, depth+4);
} else {
printf("%*s%s\n", depth, " ", entry->d_name); /* 打印文件名 */
}
}
chdir("..");
closedir(dp);
}
int
main(int argc, char *argv[])
{
char *topdir = ".";
if (argc >= 2)
topdir = argv[1];
printf("directory scanf: %s\n", topdir);
printdir(topdir, 0);
exit(0);
}
运行:
[root@localhost chap3]# ./printdir /root/src/blp
directory scanf: /root/src/blp
chap11/
test_thread
test_thread.c
chap3/
copy_system.c
destfile
copy_system
printdir.c
srcfile
printdir
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/94445/showart_1930431.html |
|