APUE课后习题4.6
来源:互联网 发布:投影机中控写码软件 编辑:程序博客网 时间:2024/05/17 03:49
创建有空洞的文件程序如下,创建的文件大小为10字节,开头字符为a,最后一个字符为b。
#include "apue.h"#include <fcntl.h>int creatHoleFile(const char *filename, mode_t mode);int main(int argc, char* argv[]){int i;if (argc < 2){printf("Usage: chf filename\n");exit(1);}for (i = 1; i < argc; i++)creatHoleFile(argv[i], FILE_MODE);exit(0);}int creatHoleFile(const char *filename, mode_t mode){int fd;if ((fd = creat(filename, mode)) < 0)err_sys("creat error");if (write(fd, "a", 1) != 1)err_sys("a write error");if (lseek(fd, 9, SEEK_SET) == -1)err_sys("lseek error");if (write(fd, "b", 1) != 1)err_sys("b write error");return fd;}
mycp.c程序如下:
#include "apue.h"#include <fcntl.h>#include <string.h>int main(int argc, char* argv[]){int i, rfd, wfd, n;char buf;if (argc != 3){printf("Usage: mycp file1 file2\2");exit(1);}if ((rfd = open(argv[1], O_RDONLY)) < 0)err_sys("open file1");if ((wfd = open(argv[2], O_CREAT | O_WRONLY | O_TRUNC, FILE_MODE)) < 0)err_sys("open file2");while (read(rfd, &buf, 1)){if (buf == '\0') //文件空洞处是字符\0continue;if (write(wfd, &buf, 1) < 0)err_sys("write");}if (n < 0)err_sys("read");exit(0);}
编译:
$gcc -o chf chf.c -lapue
$gcc -o mycp mycp.c -lapue
$./chf temp
$ls -l
总计 28
-rwxrwxr-x 1 yjp yjp 7333 11-29 16:34 chf
-rwxr--r-- 1 yjp yjp 639 11-29 16:34 chf.c
-rwxrwxr-x 1 yjp yjp 7242 11-29 18:39 mycp
-rwxr--r-- 1 yjp yjp 575 11-29 18:43 mycp.c
-rw-r--r-- 1 yjp yjp 10 11-29 18:48 temp
$./mycp temp temp1
$ls -l
总计 32
-rwxrwxr-x 1 yjp yjp 7333 11-29 16:34 chf
-rwxr--r-- 1 yjp yjp 639 11-29 16:34 chf.c
-rwxrwxr-x 1 yjp yjp 7242 11-29 18:39 mycp
-rwxr--r-- 1 yjp yjp 575 11-29 18:43 mycp.c
-rw-r--r-- 1 yjp yjp 10 11-29 18:48 temp
-rw-r--r-- 1 yjp yjp 2 11-29 18:50 temp1
可见,新复制的temp1大小为2字节,没有空洞。而且
$cat temp
ab
$cat temp1
ab
- APUE课后习题4.6
- apue 1 课后习题
- APUE课后习题10.6练习代码
- apue 习题4.6参考答案
- 课后习题
- 课后习题
- 课后习题
- APUE习题4.6---测试lseek作用
- APUE课后练习3.2
- apue习题10.5
- apue习题10.6
- APUE习题10-6
- APUE习题16.4
- apue 习题6.3
- APUE习题3.2/3.6
- apue习题12.2实现
- APUE习题4.6源代码----实现自己的简易 cp 命令
- 计算机基础知识----课后习题
- 后台可以得到集合的值,为什么前台得不到
- oracle数据库插入带有单引号的数据以及JS的调试方法
- Linux文件之/etc/sysconfig/i18n
- Ubuntu常用命令
- iOS多线程编程之NSThread的使用
- APUE课后习题4.6
- Jni学习一:了解Jni
- linux文件系统的系统分析--(八)sysfs中sysfs_dirent与inode dentry的关系
- ArcGIS 10系列安装及破解指南
- Binder---- Android 的IPC 通信机制
- 操作符结合性
- linux文件系统的系统分析--(九)sysfs下属性文件的读写
- 03.窗口与消息
- DH(Diffie-Hellman)算法本元根(原根)求法