实验四 Linux下的C语言编程 下载本文

实验四 Linux 下的 C 语言编程

四、实验内容

本实验要求在 LINUX/UNIX 环境下用 C 语言编写三个具体的 SHELL 命令,基本涉及了 LINUX/UNIX 文件系统中较为常用的有关文件操作的系统调用。内容如下:

1、编程实现 copy 命令。执行格式:copy file1 file2 file3

功能:将 file1、file2 两文件的内容合并拷入 file3 中,其中间应有 30

个字节的空洞(调试成功后可将空洞调大到几十 MB)。

程序执行后用 du 命令显示其占用磁盘空间,观察其大小,分析原因。

程序可能涉及到的系统调用: read(), write(), open(), creat(),

close(), lseek()

#include #include #include #include #include #include #include

int main(int argc, char const *argv[]) {

int file1,file2,file3; if (argc!= 4) { printf(\ exit(1); } file1=open(argv[1],O_RDONLY); file2=open(argv[2],O_RDONLY); file3=open(argv[3],O_CREAT|O_RDWR,S_IRWXU); int n; char buf[1024];

while (( n=read(file1,buf,1024))>0) if (write(file3,buf,n)!=n) printf(\ if (n<0) printf(\ if (lseek(file3,30,SEEK_END)==-1) printf(\ while (( n=read(file2,buf,1024))>0) if (write(file3,buf,n)!=n) printf(\ if (n<0) printf(\ exit(0); close(file1); close(file2); close(file3); printf(\return 0; }

2、编程实现 renam(即 LINUX 下的 rename)命令,功能是实现文件的重命名。执行格式:renam filea fileb;

其中 filea 为源文件,fileb 为目标文件。程序执行时应显示出命令行的所有参数,并给出重命名前后两个文件的大小、索引节点号及最近一次状态改变的时间。

程序可能涉及到的系统调用:read(), write(), open(), stat(),

close(), link(), unlink()

#include #include #include #include #include #include extern int errno;

int main(int argc,const char* argv[]) { struct stat buf1,buf2; if (argc!= 3) { printf(\ exit(1); } if(stat(argv[1],&buf1) == -1) { printf(\ exit(1); } printf(\使用stat()显示文件%s的信息\\n\ printf(\大小-->%d\\n\ printf(\索引节点号-->%d\\n\ printf(\最后一次修改时间-->%d\\n\ printf(\\\n\ if(rename(argv[1],argv[2])==-1){ printf(\ exit(1); } printf(\\\n\ if(stat(argv[2],&buf2) == -1) { printf(\ exit(1); } printf(\使用stat()显示文件%s的信息\\n\ printf(\大小-->%d\\n\ printf(\索引节点号-->%d\\n\ printf(\最后一次修改时间-->%d\\n\ printf(\\\n\

return 0; }

3、编程实现 lnk 命令,执行格式:lnk f1 f2 f3。具体要求如下:

⑴分别使用 link()和 symlink()为文件 f1 创建其硬链接文件 f2 和符号