实验四linu下的c语言编程.docx
- 文档编号:25919369
- 上传时间:2023-06-16
- 格式:DOCX
- 页数:6
- 大小:15.70KB
实验四linu下的c语言编程.docx
《实验四linu下的c语言编程.docx》由会员分享,可在线阅读,更多相关《实验四linu下的c语言编程.docx(6页珍藏版)》请在冰豆网上搜索。
实验四linu下的c语言编程
实验四Linux下的C语言编程
四、实验内容
本实验要求在LINUX/UNIX环境下用C语言编写三个具体的SHELL命令,基本涉及了LINUX/UNIX文件系统中较为常用的有关文件操作的系统调用。
内容如下:
1、编程实现copy命令。
执行格式:
copyfile1file2file3
功能:
将file1、file2两文件的内容合并拷入file3中,其中间应有30
个字节的空洞(调试成功后可将空洞调大到几十MB)。
程序执行后用du命令显示其占用磁盘空间,观察其大小,分析原因。
程序可能涉及到的系统调用:
read(),write(),open(),creat(),
close(),lseek()
#include
#include
#include
#include
#include
#include
#include
intmain(intargc,charconst*argv[])
{
intfile1,file2,file3;
if(argc!
=4){
printf("Usage:
copyfile1file2file3\n");
exit
(1);
}
file1=open(argv[1],O_RDONLY);
file2=open(argv[2],O_RDONLY);
file3=open(argv[3],O_CREAT|O_RDWR,S_IRWXU);
intn;
charbuf[1024];
while((n=read(file1,buf,1024))>0)
if(write(file3,buf,n)!
=n)
printf("writeerror\n");
if(n<0)
printf("read%serror\nErrno=%d\n",argv[1],errno);
if(lseek(file3,30,SEEK_END)==-1)
printf("lseekerror");
while((n=read(file2,buf,1024))>0)
if(write(file3,buf,n)!
=n)
printf("writeerror\n");
if(n<0)
printf("read%serror\nErrno=%d\n",argv[2],errno);
exit(0);
close(file1);
close(file2);
close(file3);
printf("success\n");
return0;
}
2、编程实现renam(即LINUX下的rename)命令,功能是实现文件的重命名。
执行格式:
renamfileafileb;
其中filea为源文件,fileb为目标文件。
程序执行时应显示出命令行的所有参数,并给出重命名前后两个文件的大小、索引节点号及最近一次状态改变的时间。
程序可能涉及到的系统调用:
read(),write(),open(),stat(),close(),link(),unlink()
#include
#include
#include
#include
#include
#include
externinterrno;
intmain(intargc,constchar*argv[]){
structstatbuf1,buf2;
if(argc!
=3){
printf("Usage:
renameoldfilenewfile\n");
exit
(1);
}
if(stat(argv[1],&buf1)==-1){
printf("starerror\nerrnois%d\n",errno);
exit
(1);
}
printf("使用stat()显示文件%s的信息\n",argv[1]);
printf("%s大小-->%d\n",argv[1],(int)buf1.st_size);
printf("%s索引节点号-->%d\n",argv[1],(int)buf1.st_ino);
printf("%s最后一次修改时间-->%d\n",argv[1],(int)buf1.st_mtime);
printf("--------------------------------------------------\n");
if(rename(argv[1],argv[2])==-1){
printf("renameerror\nErrno%d\n",errno);
exit
(1);
}
printf("-------------------renamesuccess------------------\n");
if(stat(argv[2],&buf2)==-1){
printf("starerror\nErrnois%d\n",errno);
exit
(1);
}
printf("使用stat()显示文件%s的信息\n",argv[2]);
printf("%s大小-->%d\n",argv[2],(int)buf2.st_size);
printf("%s索引节点号-->%d\n",argv[2],(int)buf2.st_ino);
printf("%s最后一次修改时间-->%d\n",argv[2],(int)buf2.st_mtime);
printf("--------------------------------------------------\n");
return0;
}
3、编程实现lnk命令,执行格式:
lnkf1f2f3。
具体要求如下:
⑴分别使用link()和symlink()为文件f1创建其硬链接文件f2和符号
链接文件f3。
⑵分别使用stat()和lstat()调用给出文件f2和f3大小、索引节点号、权限、存放该文件的设备号及文件修改时间,比较其异同。
说明原因。
#include
#include
#include
#include
#include
#include
externinterrno;
intmain(intargc,char*argv[]){
structstatbuf1,buf2,buf3,buf4;
if(argc!
=4){
printf("Usage:
link_examoldfilelinkfnsymlinkfn\n");
exit
(1);
}
if(link(argv[1],argv[2])==-1){
printf("linkerror\nErrno=%d\n",errno);
}
if(symlink(argv[1],argv[3])==-1){
printf("symlinkerror\nErrno=%d\n",errno);
}
if((stat(argv[2],&buf1)==-1)|(stat(argv[3],&buf2)==-1)){
printf("starerror\nerrnois%d\n",errno);
exit
(1);
}
printf("使用stat()显示文件%s和%s的信息\n",argv[2],argv[3]);
printf("%s大小-->%d\n",argv[2],(int)buf1.st_size);
printf("%s大小-->%d\n",argv[3],(int)buf2.st_size);
printf("%s索引节点号-->%d\n",argv[2],(int)buf1.st_ino);
printf("%s索引节点号-->%d\n",argv[3],(int)buf2.st_ino);
printf("%s权限-->%d\n",argv[2],(int)buf1.st_mode);
printf("%s权限-->%d\n",argv[3],(int)buf2.st_mode);
printf("%s文件所在设备号-->%d\n",argv[2],(int)buf1.st_dev);
printf("%s文件所在设备号-->%d\n",argv[3],(int)buf2.st_dev);
printf("%s最后一次修改时间-->%d\n",argv[2],(int)buf1.st_mtime);
printf("%s最后一次修改时间-->%d\n",argv[3],(int)buf2.st_mtime);
printf("****######@@@@@@&&&&STATEND&&&&@@@@@@****\n");
if((lstat(argv[2],&buf3)==-1)|(lstat(argv[3],&buf4)==-1)){
printf("lstarerror\nerrnois%d\n",errno);
exit
(1);
}
printf("--------------------------------------------------\n");
printf("使用lstat()显示文件%s和%s的信息\n",argv[2],argv[3]);
printf("%s大小是-->%d\n",argv[2],(int)buf3.st_size);
printf("%s大小是-->%d\n",argv[3],(int)buf4.st_size);
printf("%s索引节点号-->%d\n",argv[2],(int)buf3.st_ino);
printf("%s索引节点号-->%d\n",argv[3],(int)buf4.st_ino);
printf("%s权限-->%d\n",argv[2],(int)buf3.st_mode);
printf("%s权限-->%d\n",argv[3],(int)buf4.st_mode);
printf("%s文件所在设备号-->%d\n",argv[2],(int)buf3.st_dev);
printf("%s文件所在设备号-->%d\n",argv[3],(int)buf4.st_dev);
printf("%s最后一次修改时间-->%d\n",argv[2],(int)buf3.st_mtime);
printf("%s最后一次修改时间-->%d\n",argv[3],(int)buf4.st_mtime);
printf("****######@@@@@@&&&&LSTATEND&&&&@@@@@@****\n");
}
3
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 linu 语言 编程