最近苦读《Unix系统编程》便写了一些实例,逐步增加自己Unix程序设计的能力。
首先来实现一个Unix下常用命令:cp
先看代码:
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#define BUFSIZE 512
#define PERM0755
/* copy file function */
int copyfile(const char *name1, const char *name2)
{
int infile, outfile;
ssize_t nread;
char buffer[BUFSIZE];
/* 打开源文件 */
if ((infile = open(name1, O_RDONLY)) == -1)
return (-1);
/* 打开目标文件 */
if ((outfile = open(name2, O_WRONLY|O_CREAT|O_TRUNC, PERM)) == -1)
{
close(infile);
return (-2);
}
/* 循环的把源文件写入目标文件 */
while ((nread = read(infile, buffer, BUFSIZE)) > 0)
{
if (write(outfile, buffer, nread) < nread)
{
close(infile);
close(outfile);
return (-3);
}
}
/* 关闭资源 */
close(infile);
close(outfile);
if (nread == -1)
return (-4);
else
return (0);
}
main(int argc, char *argv[])
{
/* 判断提交的参数 */
if (argc != 3) {
printf("Usage: copyfile <file1> <file2>\n");
exit(1);
}
char *file1, *file2;
file1 = argv[1];
file2 = argv[2];
int retcode;
/* 进行复制 */
retcode = copyfile(file1, file2);
/* 错误信息控制 */
if (retcode == -1) {
printf("Open %s failed\n", file1);
exit(1);
}
if (retcode == -2) {
printf("Open %s failed\n", file2);
exit(1);
}
if (retcode == -3) {
printf("Read %s buffer failed\n", file1);
exit(1);
}
if (retcode == -4) {
printf("Write %s buffer failed\n", file2);
exit(1);
}
if (retcode == 0) {
printf("Copy file succeed!\n");
}
}
保存为copyfile.c,然后使用gcc来编译:gcc -o copyfile copyfile.c
使用命令的格式是:copyfile <file1> <file2>
能够复制任何文件,不管是ASC还是二进制的。其实根本原理就是调用了三个Unix下的系统调用:open, read, write,完成基本的IO操作,既然不复杂,我就不解释了。
本代码再FreeBSD5.3下编译通过。
Author: heiyeluren
Date: 2005-08-02
分享到:
相关推荐
了解Unix的文件系统结构、进程管理、权限控制、I/O操作等基础知识是Unix程序设计的基础。 2. **Shell编程**:Unix shell是用户与操作系统交互的界面,如Bash Shell。学习编写shell脚本,包括变量、条件语句、循环、...
"UNIX程序设计"是一门深入理解和掌握UNIX系统编程基础的重要课程。武汉大学的"ISS UNIX程序设计"课件提供了全面的学习资源,帮助学生和专业人士深化对UNIX编程的理解。 UNIX系统以其强大的命令行工具、丰富的文本...
《UNIX和Shell程序设计权威教程》是一本深入探讨UNIX操作系统及其Shell编程的宝贵资源。这本书旨在帮助读者理解和掌握UNIX系统的基础以及如何利用Shell脚本来自动化日常任务,提升工作效率。UNIX是一种强大的多用户...
2. **Unix程序开发**:Unix系统提供了丰富的开发工具,如编译器GCC、链接器ld、调试器gdb等,支持C、C++、Fortran等多种编程语言。此外,Makefile用于自动化构建过程,版本控制系统如Git帮助管理代码版本。 3. **...
在Linux系统中,`cp`命令是一个非常基础且重要的工具,用于复制...通过这样的实践,可以加深对Unix程序设计的理解,并增强系统级编程能力。虽然这个例子的实现较为简单,但它为理解和构建更复杂的系统工具提供了基础。
这一部分详尽地阐述了各种Unix命令,包括文件和目录操作(如ls、cd、mv、cp)、文本处理(如cat、more、less、grep、sed、awk)、进程管理(如ps、kill、nohup)以及系统信息查询(如who、uname、top)。这些命令是...
这些Unix命令在集成电路版图设计和开发中有着广泛的应用,熟悉并熟练掌握它们对于提升工作效率和解决技术问题至关重要。通过这些命令,工程师可以更好地管理文件、跟踪进程、压缩数据以及进行版本控制等操作。
【厦大-unix程序设计课实验作业】是一个与Unix系统编程相关的课程实验作业集合,包含了多个星期的作业内容。在Unix环境下,程序设计涉及到的知识点广泛且深入,它不仅是操作系统的一部分,也是软件开发的重要基石。...
1. cp 命令:用于复制文件。 2. mv 命令:用于移动或重命名文件。 3. ln 命令:用于创建链接文件。 4. more 命令:用于显示文件的内容。 5. rm 命令:用于删除文件。 UNIX操作系统知识点包括基本命令、shell 的基本...
Unix支持多任务处理,意味着用户可以同时运行多个程序或命令,这些在系统中被称为“进程”。同时,Unix还允许多个用户通过不同的终端设备同时使用同一台计算机,每个终端都有自己的终端序号。与DOS和Windows系统相比...
除此之外,还有许多其他实用的UNIX命令,如`cd`用于切换目录,`mv`和`cp`用于移动和复制文件,`rm`用于删除文件,`mkdir`和`rmdir`用于创建和删除目录,`find`用于查找文件,`grep`用于搜索含有特定字符串的行,`tar...
UNIX提供了大量的命令用于系统操作,如`ls`列出目录内容,`cd`改变目录,`mkdir`创建目录,`rm`删除文件或目录,`cp`复制文件,`mv`移动或重命名文件等。 2.4 **注销(退出UNIX系统)** 使用`exit`命令或Ctrl+D组合...
本手册是Unix第七版程序设计手册的第一卷,出版于1979年。 #### 二、手册前言 - **手册编写背景**:虽然这份第七版手册不再由Ken Thompson和Dennis Ritchie署名,但他们依然是Unix时间共享系统的创始人和导师。 - ...
UNIX是一种多用户、多任务的操作系统,其设计哲学强调程序的简洁性和可移植性。它采用分层结构,由内核、系统调用、库函数和应用程序组成。UNIX系统提供了一个强大的shell环境,允许用户通过命令行进行交互操作。 ...
8. cp命令:拷贝文件,例如cp nuts flavors、cp -i beans nuts等 9. touch命令:创建新文件或更新文件的访问和修改时间,例如touch filename(s) 10. Is命令:显示文件和目录信息,例如Is -a、Is -F、Is -I等 三、...
### Unix实验报告设计知识点 #### 实验一:文件备份的B-Shell程序 - **目标**:本实验旨在实现文件的备份功能。备份是数据管理中的一个重要环节,它能够帮助我们在数据丢失或损坏的情况下恢复重要信息。 - **实现...
1. **多任务能力**:UNIX操作系统支持多任务,允许同时运行多个应用程序,这通过分时机制和实时多任务处理实现,以满足不同场景的需求。 2. **多用户环境**:UNIX系统是设计为多用户系统,允许多人共享资源,每个...
2. **命令行接口**:Unix的核心交互方式是命令行,如ls(列出目录内容)、cd(改变目录)、mv(移动或重命名文件)、cp(复制文件)和rm(删除文件)等。 3. **管道与重定向**:Unix的管道(|)功能允许将一个命令...