Rm myhead.c swp 异常中断
Return ;
读到文件尾 少打一个加一个=号
Atoi(argv[1]+1);
练习:编写一个函数获取文件一行
Open read write close
Lseek(); 修改文件偏移量,修改哪一段
影响下一次读写操作
参数1:open()成功返回值
参数2:偏移量 +1 0 -1 [ ]偏移量 +前,-后,0当前
参数3:位置 SEEK_SET (文件开始)
SEEK_CUR (文件当前)
SEEK_END(文件末尾)
将文件第一个字符打印5次 read从上一次开始读
Lseek(fd,0,SEEK_SET); 文件开始
+1 第一个
Lseek(fd,-1,SEEK_CUR); 很有用
Open()回到文件开始 打开,读写,关闭
Read(); 一次读出很多行 mygetline(){read(); lseek()}
Fd= open(fd, O_RDONLY);
Bzero(buf,sizeof(buf));
Ret = read(fd,buf,sizeof(buf)-1);
P=buf;
While ((tmp=strchr(p,'\n'))!=NULL)
{}
Mygetline(int fd,char *buf,int size);限制边界
Read (fd,buf,size);
Lseek(fd,-)80-2,SEEK_CUR); 回车是文件的一部分
Int mygeline(int fd, char *buf, int size)
{
Int ret;l
Char *p;
Bzero(buf,size);
Ret = read(fd,buf,size);
P=strchr(buf,'\n');
P++;
Bzero(p,ret-(p-buf));
Lseek(fd,-(ret-(p-buf)),SEEK_CUR);
return (p-buf);
}
Write();内存数据写到文件里。
提示:open(,O_WRONLY|
O_RDWR);
将n行的菱形输出到文件里 如果文件不存在
Fd = open("abc",) 文件名 O_WRONLY | O_TRUNC | O_CREAT, 0666 八进制, 二进制描述不了
Write(); 也修改偏移量
目录文件上限 空间大小
参数1:open()成功的返回值
参数2:地址
参数3:大小 内存———》文件里
Fd = open("abc",O_WRONLY | O_TRUNC | O_CREAT, 0666);
Write(fd," ",1);
Close(fd);
Write(fd,"hello",5); write不写回车,没有 "hello"
Int i;
For ()
Close(fd);
Od -c abc 什么东西
Write(); 部分写入 cp
Open();
Open();
While(1)
{
Ret = read(fdr,buf,sizeof(buf)); 1024
判断= write(fdw,buf,ret); 50
}
Close();
Close();
剩下的时间不够了 部分写入
提高:带权限 mytt abc bcdef file
用lseek定位 对文件内容重写
文件修改:
修改buf,很大
1,将文件读入内存
2,修改内存中的内容
3,将内存中的全部信息写回到文件中
4,文件变大变小?改变文件大小
Uesername :passwd (16+20)
Abc:1234 修改方便
读记录信息 read(fd, buf, 36);
Read(36); 写回行首,不需要重写全部文件
Lseek(-36);
Write(,36);
Myuseradd username cp /etc/passwd
判断 -> 拷贝到当前用户下
改内容:
1,重写
2,扩展空间;
Open(); read(); write(); lseek(); close();
Dup() dup2() fcntl() ioctl()
Fcntl:
1,修改很多东西
2,对文件上锁 用处不是很大
Fcntl 改变文件状态标志(不关闭时)
Dup() dup() ; 文件描述的复制,两个记录指向同一文件
1,重定向
2,保存命令结果
Dup()
Int fd;
Int savefd;
Savefd=dup(1);
Write(1,"hello\n",6);
Write(savefd,"hello\n",6); 参数不同,功能不同
两个文件描述符指向同一文件
savefd=dup(1); 新的文件描述符
Prnitf (" "); 3 当前最小的文件描述符
Dup2()
参数1 参数2
如果参数2已经被打开,先关闭,(没有关系)
Int fd;
Fd = open("abc",O_WRONLY | O_TRUNC | O|CREAT, 0666);
Dup2(fd,1);
Write (1, "hello\n",6);
0 stdin
1 stdout
2 stderr
Fd 3 abc
Dup2(fd,1);
将hello 字符串,在屏幕上输出一下,现输出到文件中?
先输出文件,再在屏幕上输出hello
Int savefd;
Savefd = dup(1) ;
Printf ("hello");
Fflush(NULL);
Write(1,"hello\n",6);
Dup2(1,savefd);
Dup2(savefd,1); 恢复
保存结果:
Dup2(fd,1);
Printf ( " ");
Fflush(NULL);
Dup2(savefd,1);
Printf (""); ls->abc 重定向
Fork();
{
Fd = open();
Dup2(fd,1);
Execlp("ls","ls",NULL);
System(ls); -> printf ("")
}
POSIX: 系统调用
ANSI: 库函数
练习:将图形的练习使用dup2,输出到文件中.
1024 2048 4096
1myuseradd username 读---.>写 passwd
2mytt abcd bc file 文件读写修改
嵌入式web
普通文件-> html 网页 在文件里头尾加东西
实际修改三个文件 一个目录
/etc/shadow
/etc/groud 属于一个组
/etc/passwd
Home 名字
Int mygetline (int fd,char *buf, int size)
{
Int ret;
Char *p;
Bzero(buf,size);
Ret = read(fd,buf,size-1);
If (ret<=0) return ret;
P = strchr(buf,':');
If (p==NULL) return ret;
P++;
Bzero(p.ret-(p-buf));
Lseek(fd,)
}
Spirntf ("%s:x:%d:%d:/home/%s:bin/bash");
Write();
文件属性,目录
文件属性:获取文件属性?设置修改文件属性
Stat(); 获取文件属性
文件类型不能修改
Ls -l
-rw-rw-rw- /root root 203 时间 a.c
类型
目录的操作
Opendir() readdir() closedir()
文件属性的设置
Chmod link chown chgrp atime
Truncate rename
(改变文件大小)
练习:
Ls -l -S 目录/文件 ls -l a.c
提高:
Mycp 复制链接文件,目录
比较两个目录是否一样
提高:目录包括子目录
编写程序:统计指定目录中所有.c文件的行数
包括子目录
递归 n!快速排序 树
递归的深度
1,终止条件
2,功能
3,自己调用 根/dev (没有大小)主设备号:驱动 从设备号:驱动下
Linux 文件类型 - (touch创建) d l b c p(也没有大小内核) s
每个进程4个G
Stat();
Const char *;
参数1:文件名, open 一样
参数2:保存文件属性(地址)
Struct stat; (结构体)
返回值:成功0 失败 -1 perror
Struct stat *info=NULL;4个字节
Struct stat info;
Ret=Stat ("abc",&info);
If (ret <0)
Goto stat_err;
Printf ("%d %s\n",info.st_size,"abc");
Echo " " > abc
问题:1,文件类型
2,文件权限
3,uid转为名字 用户名 getpwuid
4,gid转为组名称赞 vi /etc/groud getgrgid
5,时间 月,日,小时,分钟. Ctime
秒数转时间
Printf ("%d ",info.st_ctime); 秒->时间
Struct passwd *getpwuid(uidt_uid);
Pirntf ("%.12s",); 12个
Printf ("-");文件类型
目录操作:
Opendir(); 打开目录文件; (文件名)
Readdir(); 获取目录文件中的一条记录
Closedir(); 关闭目录文件
Opendir():参数:目录名字 "."当前路径 ".."当前上一级
返回值 成功DIR * 失败 NULL
Readdir();参数:opendir()成功的返回值
返回值成功:struct dirnet *
失败:NULL
(文件名) d_name 我们关注的 数组长度
Closedir();关闭目录文件
参数:opendir 成功的返回值
Dp = opendir(".");
DIR *dp;
While (1)
{
Dir = readdir();
Printf ("%s\n",dir->d_name);
Readdir();
}
Struct dirent *dir; closedir();