免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 1960 | 回复: 13

急:LINUX下C小问题 [复制链接]

论坛徽章:
0
发表于 2004-07-30 16:16 |显示全部楼层
#include <stdio.h>;
int main()
{
FILE *fp;
char filename[]="/tmp/test";
char rdate[]=system("date +%Y%m%d -d '1 days ago'"; (此句GCC编译出错此句有问题,检查system运行正确,去掉此句及下的的倒数第三句编译是成功的)
fopen(fp,filename);
fprintf(fp,"#!/bin/sh";
fprintf(fp,"\n%s",rdate);
fclose(fp);
}

请问如何赋值rdate为昨日日期并写到文件?

论坛徽章:
0
发表于 2004-07-30 16:29 |显示全部楼层

急:LINUX下C小问题


  1. #include <stdio.h>;
  2. #include <time.h>;

  3. time_t yestoday = time(0) - 86400; /* because 1 day equals 86400 sec. */

  4. fprintf(fp, "%s", ctime(&yestoday));

复制代码

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2004-07-30 16:30 |显示全部楼层

急:LINUX下C小问题

你看一下 system 的原型。
谁告诉你的,数组的初始化还可以这样做?
不过,估计你也不明白什么叫做“数组的初始化”。

论坛徽章:
0
发表于 2004-07-30 16:33 |显示全部楼层

急:LINUX下C小问题

字符串数组只能用字符串常量来初始化。

论坛徽章:
0
发表于 2004-07-30 16:36 |显示全部楼层

急:LINUX下C小问题

对不起,不是字符串数组,而是字符数组。

论坛徽章:
0
发表于 2004-07-30 16:50 |显示全部楼层

急:LINUX下C小问题

谢谢,好久不玩编程了,都忘记了,system返回是int
我错大了。

论坛徽章:
0
发表于 2004-07-30 16:55 |显示全部楼层

急:LINUX下C小问题

fprintf(fp, "%s", ctime(&yestoday));
我想要输出%Y%m%d的格式(如20040729)怎么办?
谢谢了。

论坛徽章:
0
发表于 2004-07-30 17:30 |显示全部楼层

急:LINUX下C小问题

调用系统的system() ,其运行的结果,是显示在标准输出上的,而不是通过返回可以得到的。。
以下的程序是我改过别人的一个my_system(),他可以将运行结果返回到第二个参数中,第一个参数同system()一样接收你要执行的语句,第三个参数表示结果的大小数。

  1. #include <stdio.h>;
  2. #include <unistd.h>;
  3. #include <sys/types.h>;
  4. #include <stdlib.h>;


  5. int my_system(const char* pCmd, char* pResult, int size)
  6. {

  7.         int fd[2];
  8.         int pid;
  9.         int count;
  10.         int left;
  11.         char *p = 0;
  12.         int maxlen =size-1;

  13.         memset(pResult, 0, size);
  14.         /*pipe  creates  a  pair of file descriptors, pointing to a pipe
  15.          inode,and places them in the array pointed to by filedes.
  16.          filedes[0] is for reading, filedes[1] is for writing.
  17.        */
  18.         if(pipe(fd))
  19.         {
  20.                 printf("pipe error\n");
  21.                 return -1;
  22.         }
  23.        
  24.         if((pid = fork()) == 0)
  25.         {
  26.                 // chile process
  27.                 int fd2[2];
  28.                 if(pipe(fd2))
  29.                 {
  30.                         printf("pipe2 error\n");
  31.                         return -1;
  32.                 }
  33.                
  34.                 close(1);
  35.                 dup2(fd2[1],1);
  36.                
  37.                 close(fd[0]);
  38.                 close(fd2[1]);
  39.                
  40.                 system(pCmd);
  41.                 read(fd2[0], pResult, maxlen);
  42.        
  43.                 pResult[strlen(pResult)-1] = 0;
  44.                
  45.                 write(fd[1], pResult, strlen(pResult));
  46.                
  47.                 close(fd2[0]);
  48.                 exit(0);
  49.         }
  50.        
  51.         // parent process
  52.         close(fd[1]);
  53.        
  54.         p = pResult;
  55.         left = maxlen;
  56.        
  57.         while((count = read(fd[0], p, left)))
  58.         {
  59.                 p+= count;
  60.                 left -= count;
  61.                 if(left == 0)
  62.                 break;
  63.         }
  64.        
  65.         close(fd[0]);
  66.         return 0;
  67. }

  68. int main(int argc,char * argv[])
  69. {
  70.         char *pCommand =argv[1];
  71.         int bufnum = atoi(argv[2]);
  72.         char *result = malloc(1024);
  73.        
  74.         if(argc != 3)
  75.         {
  76.                 printf("argument error!\n");       
  77.                 return;
  78.         }
  79.         my_system(pCommand, result,bufnum);

  80.         printf("the result is\n\n%s\n", result);
  81.         free(result);
  82.         return 0;
  83. }

复制代码

论坛徽章:
0
发表于 2004-07-30 17:34 |显示全部楼层

急:LINUX下C小问题

ps,上面的程序编译以后,执行时需带上两个参数,即:
./filename 命令 执行命令后结果的长度,如:
./filename date 50
表示系统将执行date命令,显示的结果会在50个字符以内

长度不要超过1024,否则你去改程序中malloc()那一行。

论坛徽章:
0
发表于 2004-07-30 17:34 |显示全部楼层

急:LINUX下C小问题

改用管道从系统shell中获得日期, see:


  1. #include <stdio.h>;
  2. #include <stdlib.h>;

  3. int main(int argc, char *argv[])
  4. {

  5. FILE *fp;
  6. char *st;

  7. st=(char *)malloc(8);
  8. scanf("%s",st);
  9. if((fp=fopen("test.txt","wt"))==NULL)
  10. {
  11.   printf("Cannot open file, exit!\n");
  12.   exit(1);
  13. }
  14. fprintf(fp,"#!/bin/sh\n");
  15. fprintf(fp,"%s",st);
  16. fclose(fp);
  17. }
复制代码


运行时候可以直接用date +%Y%m%d -d '1 days ago' |a.out
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP