linux c编程的问题

aliulf 2017-10-18 10:58:49
//每隔一秒创建一个文件夹,名称为时+分
//在文件夹中每隔一秒创建一个文件,将时间信息写入文件中
#include<unistd.h>
#include<fcntl.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<time.h>
#include<sys/time.h>
#include<dirent.h>
#include<string.h>
#include<stdio.h>
int creat_dir(char *); //创建文件夹函数
int creat_file(char *,char *,char *); //创建并写入函数
int creat_dir(char *pathname)
{
DIR *p;
int temp; //mkdir返回值
p=opendir(pathname);
if(p=NULL)
{
printf("打开文件夹失败,文件夹不存在\n");
temp=mkdir(pathname,0777);
if(temp==-1)
{
printf("创建文件失败\n");
return -1;
}
else
{
printf("创建文件夹成功\n");
return 0;
}
}
else
{
printf("文件夹已存在\n");
return 0;
}
}
int creat_file(char *pathname,char *filename,char *writebuf)
{
int temp; //chdir返回值
int fd; //文件标识符
int temp_write; //open函数返回值
char wdir[100]; //储存工作路径
temp=chdir(pathname);
if(temp==-1)
{
printf("切换工作路径失败\n");
return -1;
}
else
{
if((getcwd(wdir,100))==NULL)
{
printf("获取工作路径失败\n");
}
printf("工作路径为:%s\n",wdir);
fd=open(filename,O_RDWR|O_CREAT,S_IRWXU);
//以传入名字创建文件
if(fd==-1)
{
printf("创建文件失败\n");
return -1;
}
else
{
printf("创建文件成功\n");
temp_write=write(fd,writebuf,strlen(writebuf));
if(temp_write==-1)
{
printf("写入失败\n");
close(fd);
return -1;
}
else
{
printf("写入成功\n");
close(fd);
return 0;
}
}
}
}
int main()
{
int temp_creat; //创建文件夹函数返回值
int temp_file; //创建文件返回值
char dirname[10]="DIR"; //目录名
char filename[10]="File"; //文件名
char writebuf[15]; //写入缓冲区
time_t timetemp; //时间变量
struct tm *time_str; //时间结构体
char timebuf[3]; //待连接入的时间信息
char timebuf_2[3];
time(&timetemp);
time_str=gmtime(&timetemp); //存入结构体时间中
sprintf(timebuf_2,"%02d",time_str->tm_min);
strcat(dirname,timebuf_2); //文件夹名称加入时间信息
temp_creat=creat_dir(dirname); //调用创建文件夹函数
if(temp_creat==-1) //创建失败
{
return 1;
}
else
{

sprintf(writebuf,"%s\n",ctime(&timetemp)); //将时间信息加入到writebuf中
sprintf(timebuf,"%02d",time_str->tm_sec);
strcat(filename,timebuf); //文件名称加入时间信息
temp_file=creat_file(dirname,filename,writebuf);
//调用创建文件函数
if(temp_file==-1) //创建失败
{
return 2;
}
else
{
return 0;
}
}
}


运行结果是
文件夹已存在
切换工作路径失败
已放弃(核心转储)

我gdb调试了下 打开文件夹那里 明明文件夹不存在 为什么返回的指针p不是NULL 纠结了很久 新手 求大神指点



...全文
2761 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
suxingtian 2019-06-01
  • 打赏
  • 举报
回复
老手不会写错
圣骑士笑笑 2018-11-27
  • 打赏
  • 举报
回复
这个可以的, if里面的语法问题
英雄@末路 2018-10-09
  • 打赏
  • 举报
回复
if(p) 就行了,现在编译器都支持,如果记得NULL == p 当然好,但一般想得起这么写,那估计正向写也不会忘了。。。
Chelios_Lee 2018-08-22
  • 打赏
  • 举报
回复
我也觉得用shell 几行就搞定了 ,或者在程序中直接用system调用
理科男同学 2018-08-19
  • 打赏
  • 举报
回复
哈哈哈!受教了
Leoyyd 2018-02-28
  • 打赏
  • 举报
回复
很实用的技巧,学习了!
念念有余 2018-02-05
  • 打赏
  • 举报
回复
引用 8 楼 windandcloudflying 的回复:
if判断这样写 if (NULL == p) 这样可以防止比较符号写成赋值符号
这个建议不错
u012236270 2018-01-17
  • 打赏
  • 举报
回复
所以所 if判断还是需要if(NULL == p) 比较安全点
yuedahan 2017-11-22
  • 打赏
  • 举报
回复
全是坑啊。不是在改BUG就是在写BUG
Acuity. 2017-11-20
  • 打赏
  • 举报
回复
在CSDN遇到很多把“=”当成“==”的情况了。
  • 打赏
  • 举报
回复
楼上的建议一看就是老手了
永远的霸者 2017-11-11
  • 打赏
  • 举报
回复
if判断这样写 if (NULL == p) 这样可以防止比较符号写成赋值符号
lininglive 2017-11-10
  • 打赏
  • 举报
回复
这错误比较低级,但是是经常犯的
yangtuo250 2017-11-09
  • 打赏
  • 举报
回复
用shell写更简单吧
aliulf 2017-11-09
  • 打赏
  • 举报
回复
引用 2 楼 bigPillow的回复:
Hi Feng, In your`s code : if(p=NULL) you mean to be: if(p==NULL)
yes thanks
aliulf 2017-11-09
  • 打赏
  • 举报
回复
引用 3 楼 HITYM627的回复:
楼主现在这个问题解决了吗 能否分享一下
解决了 就是楼上说的那样
HITYM627 2017-11-03
  • 打赏
  • 举报
回复
楼主现在这个问题解决了吗 能否分享一下
bigPillow 2017-10-22
  • 打赏
  • 举报
回复
Hi Feng, In your`s code : if(p=NULL) you mean to be: if(p==NULL)
jklinux 2017-10-19
  • 打赏
  • 举报
回复
先用管理员权限执行程序试看看,程序不一定有权限创建目录或文件的。
linux C语言 网络编程教程及源码 一、网络应用层编程 1、Linux网络编程01——网络协议入门 2、Linux网络编程02——无连接和面向连接的区别 3、Linux网络编程03——字节序和地址转换 4、Linux网络编程04——套接字 5、Linux网络编程05——C/S与B/S架构的区别 6、Linux网络编程06——UDP协议编程 7、Linux网络编程07——广播 8、Linux网络编程08——多播 9、Linux网络编程09——TCP编程之客户端 10、Linux网络编程10——TCP编程之服务器 11、Linux网络编程11——tcp、udp迭代服务器 12、Linux网络编程12——tcp三次握手、四次挥手 13、Linux网络编程13——connect()、listen()和accept()三者之间的关系 14、Linux网络编程14——I/O复用之select详解 15、Linux网络编程15——I/O复用之poll详解 16、Linux网络编程16——I/O复用之epoll详解 17、Linux网络编程17——tcp并发服务器(多进程) 18、Linux网络编程18——tcp并发服务器(多线程) 19、Linux网络编程——tcp高效并发服务器(select实现) 20、Linux网络编程——tcp高效并发服务器(poll实现) 21、Linux网络编程——tcp高效并发服务器(epoll实现) 二、网络底层编程(黑客模式) 1、Linux网络编程1——啥叫原始套接字 2、Linux网络编程2——原始套接字编程 3、Linux网络编程3——原始套接字实例:MAC头分析 4、Linux网络编程4——原始套接字实例:MAC地址扫描器 5、Linux网络编程5——IP数据报格式详解 6、Linux网络编程6——TCP、UDP数据包格式详解 7、Linux网络编程7——原始套接字实例:发送UDP数据包 8、Linux网络编程8——libpcap详解 9、Linux网络编程9——libnet详解
目 录 第一篇 Linux和C编程基础  第1章 Linux系统概述   1.1 Linux操作系统介绍     1.1.1 Linux的发展历程     1.1.2 Linux的特性     1.1.3 Linux的内核版本和发行版本    1.2 C语言简介     1.2.1 C语言的发展历史     1.2.2 C语言的特点    1.3 Linux的安装、启动与关闭    1.4 Linux的基本使用     1.4.1 Linux终端     1.4.2 Linux Shell     1.4.3 Linux的常用命令    1.5 Linux下程序的开发环境和开发过程    1.6 习题   第2章 C编程基础、Vi和Emacs编辑器    2.1 C程序的结构    2.2 C语言的基本数据类型     2.2.1 整型     2.2.2 浮点型     2.2.3 字符型    2.3 运算符和表达式     2.3.1 算术运算符与算术表达式     2.3.2 赋值运算符与赋值表达式     2.3.3 逗号运算符与逗号表达式    2.4 标准输入输出函数     2.4.1 字符输出函数putchar     2.4.2 字符输入函数getchar     2.4.3 格式化输出函数printf     2.4.4 格式化输入函数scanf    2.5 Vi编辑器的使用     2.5.1 Vi的工作模式     2.5.2 启动Vi     2.5.3 保存文件和退出Vi     2.5.4 光标的移动     2.5.5 文本的删除     2.5.6 文本查找和替换     2.5.7 文本的复制与粘贴    2.6 Emacs编辑器的使用    2.7 命名规范     2.7.1 标识符     2.7.2 关键字     2.7.3 命名规范    2.8 面试题选与实例精讲     2.8.1 面试题选     2.8.2 实例精讲    2.9 习题   第3章 C程序控制结构和gcc编译器    3.1 C程序的控制结构     3.1.1 C程序语句概述     3.1.2 C程序的3种基本控制结构    3.2 分支控制结构     3.2.1 关系运算符与关系表达式     3.2.2 逻辑运算符与逻辑表达式     3.2.3 if语句     3.2.4 switch语句    3.3 循环控制结构     3.3.1 while语句     3.3.2 do...while语句     3.3.3 for语句     3.3.4 break语句和continue语句    3.4 gcc编译器     3.4.1 程序的编译过程     3.4.2 gcc的常用选项     3.4.3 gcc的报错类型及对策    3.5 面试题选与实例精讲     3.5.1 面试题选     3.5.2 实例精讲    3.6 习题   第4章 C函数、数组、指针和调试器gdb   第5章 C语言预处理、结构体和make的使用  第二篇 Linux系统编程  第6章 文件操作   第7章 进程控制   第8章 线程控制   第9章 信号及信号处理   第10章 进程间通信  第三篇 Linux网络和图形界面编程  第11章 网络编程   第12章 GTK+图形界面编程  第四篇 Linux项目实践  第13章 项目实践:BT下载软件的开发

1,318

社区成员

发帖
与我相关
我的任务
社区描述
主要是开发驱动技术
社区管理员
  • 驱动程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧