我的学习方法是:Linux系统编程(看pdf笔记) + Linux网络编程 + WebServer
cp -a dirname1 dirname2
复制目录
cp -r dirname1 dirname2
递归复制目录 1 到目录 2
这里-a 和-r 的差别在于,-a 是完全复制,文件权限,改动时间什么的也完全相同。
more filename
和 cat
差不多,但是对于大文件查看很强势
head -n filename
查看文件前 n 行
tail -n filename
查看文件后 n 行
ln -s file file.s
创建一个软链接(相当于win的快捷方式),最好使用绝对路径
ln file file.h
创建一个硬链接,文件和硬链接的 Inode 是相同的,每个文件都有唯一的 Inode(硬链接一改都改,类似于cpp的引用)
find命令
-type按种类,-name按名字
grep 命令:找文件内容
,与ps配合使用ps aux | grep 'cupsd'
gzip 和 bzip2
都是压缩命令,配合tar使用,rar压缩需要安装rar。
ifconfig
查看网卡信息
open()
函数出错时,程序会自动设置 errno,可以通过 strerror(errno)来查看报错数字的含义 以打开不存在文件为例(如果成功fd会返回打开文件所得到对应的 文件描述符)dev/tty
(这也是个文件),如下写法就是阻塞的:/* 使用阻塞的read读取终端(标准输入输出)*/
#include
#include
#include
int main(){
char buf[10];
int n;
n = read(STDIN_FILENO, buf, 10);
if(n < 0){
perror("read STDIN_FILENO");
exit(1);
}
write(STDOUT_FILENO, buf, n);
return 0;
}
fcntl(file control)
是一个系统调用,用来改变一个【已经打开】的文件的访问控制属性int fcntl(int fd, int cmd, ... /* arg */ );
cmd表示命令,比如下面这句代码将阻塞改为非阻塞:其中F_SETFL设置,F_GETFL获取 flags = fcntl(STDIN_FILENO, F_GETFL); //获取 stdin 属性信息
if(flags == -1){
perror("fcntl error");
exit(1);
}
flags |= O_NONBLOCK;
int ret = fcntl(STDIN_FILENO, F_SETFL, flags);
if(ret == -1){
perror("fcntl error");
exit(1);
}
lseek
函数通常用于随机访问文件,例如读取文件中的某个特定位置的数据。#include
off_t lseek(int fd, off_t offset, int whence);
fd
是文件描述符,offset
是偏移量,whence
是偏移量的起始位置。whence
可以取以下三个值之一:
- `SEEK_SET`:偏移量相对于文件开头。
- `SEEK_CUR`:偏移量相对于当前位置。
- `SEEK_END`:偏移量相对于文件末尾。
返回值是新的文件偏移量(-1表示错误)
#include
#include
#include
#include
int main(int argc, char *argv[]) {
if (argc != 2) {
fprintf(stderr, "Usage: %s \n" , argv[0]);
exit(1);
}
int fd = open(argv[1], O_RDONLY);
if (fd == -1) {
perror("open error");
exit(1);
}
off_t size = lseek(fd, 0, SEEK_END);
if (size == -1) {
perror("lseek error");
exit(1);
}
printf("File size: %ld bytes\n", size);
close(fd);
return 0;
}
传入参数: 1. 指针作为函数参数。 2. 同常有 const 关键字修饰。 3. 指针指向有效区域, 在函数内部做读操作。
传出参数: 1. 指针作为函数参数。 2. 在函数调用之前,指针指向的空间可以无意义,但必须有效。 3. 在函数内部,做写操作。 4。函数调用结束后,充当函数返回值。
传入传出参数: 1. 指针作为函数参数。 2. 在函数调用之前,指针指向的空间有实际意义。 3. 在函数内部,先做读操作,后做写操作。 4. 函数调用结束后,充当函数返回值。
inode
号码,通过这个号码可以访问文件的元数据信息,例如文件的权限、所有者、大小、创建时间、修改时间等等。inode
号码是分开存储的。文件名存储在目录中,而inode
号码存储在文件系统的inode
表中。