c中几个copy函数的使用细节

strcpy是拷贝字符串,以\0为标志结束(即一旦遇到数据值为0的内存地址拷贝过程即停止)
strcpy的原型为
char *strcpy(char *dest, const char *src)
而memcpy是给定来源和目标后,拷贝指定大小n的内存数据,而不管拷贝的内容是什么(不仅限于字符)
memcpy的原型为
void *memcpy(void *dest, const void *src, size_t n);
 
C语言中的exit()函数,括号中有时为1,有时为0
在main函数中我们通常使用return (0);这样的方式返回一个值。
但这是限定在非void情况下的也就是void main()这样的形式。
exit()通常是用在子程序中用来终结程序用的,使用后程序自动结束跳会操作系统。
但在如果把exit用在main内的时候无论main是否定义成void返回的值都是有效的,并且exit不需要考虑。
括号中有时为1,有时为0
遇到1 就代表出错后结束程序~其实不一定是1的~非0值也可以!遇到0就表示正常退出~~
例如:
你定义一个文件的指针fp
if (fp=fopen ("c:\\abc.txt","r"))==NULL)
{
  printf("Can not open the file.\n");
  exit(1);
}
如果文件不存在那么就跳出程序了 
如果用struct的话,注意以下几点:

1.尽量使用占为少的类型,如,在可能的时候使用short代替int
2.按数据类型本身占用的位置从大到小排列
  例如
struct{
    int a;
    char b;
    int c;
    char d;
}
应该写为:
struct{
 int a;
 int c;
 char b;
 char d;
};

一般的编译器会采取一种叫做填充(padding)的方式来对齐数据.
以一个机器字(比如在32-bit的机器上为word = 32bit.)为基础进行填充.
像上面的struct会这样存储:
(xp,vc6.0)
a        32bit = 4byte
c        32bit = 4byte
b,d,*,*  32bit = 4byte
其中,两个*号表示填充(但是并没有使用那两个位置.)
system函数:参数放入的是一个命令。
#include <sys/types.h>
#include <sys/wait.h>
#include <errno.h>
#include <unistd.h>
int system(const char * cmdstring)
{  pid_t pid;
    int status;
   if(cmdstring == NULL){
           return (1);
    }


    if((pid = fork())<0){

            status = -1;
    }


    else if(pid = 0){

        execl("/bin/sh", "sh", "-c", cmdstring, (char *)0);

        -exit(127); //子进程正常执行则不会执行此语句

        }

    else{

            while(waitpid(pid, &status, 0) < 0){

                if(errno != EINTER){

                    status = -1;

                    break;

                }

            }

        }


        return status;


}


先分析一下原理,然后再看上面的代码大家估计就能看懂了:   
    当system接受的命令为NULL时直接返回,否则fork出一个子进程,因为fork在两个进程:父进程和子进程中都返回,这里要检查返回的pid,fork在子进程中返回0,在父进程中返回子进程的pid,父进程使用waitpid等待子进程结束,子进程则是调用execl来启动一个程序代替自己,execl("/bin/sh", "sh", "-c", cmdstring, (char*)0)是调用shell,这个shell的路径是/bin/sh,后面的字符串都是参数,然后子进程就变成了一个shell进程,这个shell的参数
是cmdstring,就是system接受的参数。在windows中的shell是command,想必大家很熟悉shell接受命令之后做的事了。

rewind函数用于把fp所指文件的内部位置指针移到文件头


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值