当前位置: 首页 > 编程日记 > 正文

山寨c 标准库中的getline 函数

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

要山寨一个函数,只要看两点

  1. 原版函数的形参。

  2. 原函数的返回值。

下面是函数原型。

ssize_t getline(char **lineptr, size_t *n, FILE *stream);

函数返回值。

RETURN VALUE

On  success,  getline() and getdelim() return the number of characters read, including the delimiter character, but not including the terminating null byte.  This value can be used to handle embedded null bytes in the line read.

      Both functions return -1 on failure to read a line (including end-of-file condition).


下面是山寨getline 实现代码。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>ssize_t ho_getline(char **buf, size_t *n, FILE *fp) {char c;int needed = 0;int maxlen = *n;char *buf_ptr = *buf;if (buf_ptr == NULL || maxlen == 0) {maxlen = 128;if ((buf_ptr = malloc(maxlen)) == NULL)return -1;}do {c = fgetc(fp);buf_ptr[needed++] = c;if (needed >= maxlen) {*buf = buf_ptr;buf_ptr = realloc(buf_ptr, maxlen *= 2);if (buf_ptr == NULL) {(*buf)[needed - 1] = '\0';return -1;}}if (c == EOF)return -1;} while (c != '\n');buf_ptr[needed] = '\0';*buf = buf_ptr;*n = maxlen;return needed;
}


测试代码:

void test_main(const char *fname) {FILE *fp;char *line = NULL;size_t len = 0;ssize_t read;fp = fopen(fname, "r");if (fp == NULL)exit(EXIT_FAILURE);while ((read = ho_getline(&line, &len, fp)) != -1) {printf("Retrieved line of length %zu :\n", read);printf("%s", line);}   fclose(fp);free(line);
}int main(void) {test_main("/etc/motd");return 0;
}


转载于:https://my.oschina.net/guonaihong/blog/278505

相关文章:

封ip对爬虫的影响

今天要聊的是封ip对爬虫的影响。我认为封ip能拒绝一部分网络请求&#xff0c;减轻服务器的压力&#xff0c;但是如果要是建立一个好的ip池&#xff0c;封对爬虫的影响不大。 爬取国内一个拍卖公司的网站&#xff0c;刚开始用多进程下载&#xff0c;每分钟能爬取 1000个页面&…

Python 的一万种用法:制作 Web 可视化页面

来源 | 法纳斯特头图 | 下载于ICphoto一谈到Web页面&#xff0c;可能大家首先想到就是HTML、CSS或JavaScript。本次小F给大家介绍一下如何用Python制作一个数据可视化网页&#xff0c;使用到的是Streamlit库&#xff0c;轻松将一个Excel数据文件转换为一个Web页面&#xff0c;提…

【Go语言】LiteIDE使用的个人使用方法

Go语言开发 可以使用的IDE很多 &#xff08;Goclipse&#xff0c;sublime&#xff0c;notepad&#xff0c;vim等&#xff09;目前使用的最顺手的就是LiteIDE了 但是尽管这样&#xff0c;一开始使用LiteIDE也有很多不习惯的地方&#xff0c;下面主要总结了一些自己喜欢的用法 首…

发挥大数据及其产业在推动发展方式转变上的作用

大数据时代的到来&#xff0c;互联网成为基础设施&#xff0c;数据变成重要资源&#xff0c;这不仅意味着海量、多样、快速的数据处理和技术创新&#xff0c;更为重要的是改变了传统要素的组合方式。这种变化客观上要求必须转变传统的经济增长方式&#xff0c;实现创新驱动发展…

Google 全球 IP 地址库一览表(更新中)

IP 地址来源&#xff1a;http://www.kookle.co.nr&#xff0c;共计4351个。【链接】http://www.kookle.co.nr/https://github.com/justjavac/Google-IPsBulgaria93.123.23.193.123.23.293.123.23.393.123.23.493.123.23.593.123.23.693.123.23.793.123.23.893.123.23.993.123.2…

Linux下的阻塞(Block)

阻塞&#xff08;Block&#xff09;这个概念。当进程调用一个阻塞的系统函数时&#xff0c;该进程被置于睡眠&#xff08;Sleep&#xff09;状态&#xff0c;这时内核调度其它进程运行&#xff0c;直到该进程等待的事件发生了&#xff08;比如网络上接收到数据包&#xff0c;或…

发布 128 核 Altra Max,自研内核,明年推出 5nm 处理器,“性能怪兽”Ampere 搞大事?...

作者 | 伍杏玲出品 | AI 科技大本营&#xff08;ID:rgznai100&#xff09;头图 | 下载于ICphoto2015 年&#xff0c;在英特尔就职 28 年的总裁 Renee James 辞职&#xff0c;正在大众纷纷猜测她将如何开启下一段旅程时&#xff0c;她有了创业的想法&#xff0c;2017 年带领新团…

纷纷布局的全光网,是你所熟知的吗?

近日&#xff0c;中国电信甘肃公司举行甘肃全光网建成发布会&#xff0c;至2017年4月30日&#xff0c;甘肃省已建成14个全光网市州、87个全光网县区、1234个全光网乡镇、10000个全光网行政村&#xff0c;全省市、县、乡光网宽带覆盖率达到95%以上&#xff0c;全面实现光纤到户;…

内存转换Image到Icon

时候我们需要在内存中转换Image格式到Icon 根据经验&#xff0c;通常我们应该可以这样做 Image image xxxx;///假设这里已经有一个Image对象 System.IO.MemoryStream mStream new System.IO.MemoryStream();///创建内存流 image.Save(mStream, System.Drawing.Imaging.Ima…

Spring注解@Component、@Repository、@Service、@Controller,@Autowired、@Resource用法

一、Spring定义bean&#xff0c;Component、Repository、Service 和 Controller Spring 2.5 中除了提供 Component 注释外&#xff0c;还定义了几个拥有特殊语义的注释&#xff0c;它们分别是&#xff1a;Repository、Service 和 Controller。在目前的 Spring 版本中&#xff0…

谁是“艾灵”?是腾讯的真国风 AI 虚拟人!

近日&#xff0c;腾讯AI虚拟人艾灵再秀出新技能&#xff0c;首次展示AI作诗、AI书法等国风才艺&#xff0c;并与青年歌手白举纲跨次元合作&#xff0c;共同演唱国风新歌《百川千仞》。AI“艾灵”诞生于腾讯AI Lab&#xff0c;来自实验性、探索性技术项目“多模态虚拟人”。机器…

[Java实现] 图片择优(选择最清楚的图片)

FuzzyDetection 图片择优&#xff08;选择最清楚的图片&#xff09;【Java实现】效果不错&#xff0c;大家可以根据我的源码改成自己使用的语言并应用到自己项目中。 实现思路 获取图片的灰度图数组使用拉普拉斯算子进行卷积运算 {0, 1, 0, 1, -4, 1, 0, 1, 0}获取结果的方差与…

C#获取硬盘序列号

using System; using System.IO; using System.Runtime.InteropServices; using System.Text; using Microsoft.Win32; namespace Wjb.ReadOrWriteIniAndReg { /// <summary> /// HardDiskVal 的摘要说明。 /// 读取指定盘符的硬盘序列号 /// 功能&#xff1a;读…

Arm 发布移动端 v9 体系新架构,CPU、GPU、IP全囊括了

作者 | 夕颜头图 | 下载于ICphoto出品 | AI 科技大本营&#xff08;ID:rgznai100&#xff09;2021年5月25日晚&#xff0c;Arm发布了针对移动端的Armv9体系新架构&#xff0c;除了公布首款全面计算&#xff08;Total Compute&#xff09;解决方案&#xff0c;Arm还发布了首批基…

16条很有用的Chrome浏览器命令

为什么80%的码农都做不了架构师&#xff1f;>>> Google Chrome浏览器有很多的特性在界面菜单中是没有体现的&#xff0c;你可以通过「chrome://命令」来访问。在Chrome的浏览器地址栏中输入命令&#xff0c;就会返回相应的结果。下面是16个非常有用的chrome://命令…

Spring集成Redis方案(spring-data-redis)(基于Jedis的单机模式)(待实践)

说明&#xff1a;请注意Spring Data Redis的版本以及Spring的版本&#xff01;最新版本的Spring Data Redis已经去除Jedis的依赖包&#xff0c;需要自行引入&#xff0c;这个是个坑点。并且会与一些低版本的Spring有冲突&#xff0c;要看官方文档和不断的测试。 继上一篇文章ht…

leetcode -- 3 sum

3-sum 题目描写叙述&#xff1a; Given an array S of n integers, are there elements a, b, c in S such that a b c 0? Find all unique triplets in the array which gives the sum of zero. 题目要求&#xff1a; Elements in a triplet (a,b,c) must be in non-desc…

C#中如何得到机器的IP地址

如何使用DNS类并得到机器的IP地址的技巧 介绍 这篇文章并不是技术纵览或大型讨论&#xff0c;而更像是关于如何得到IP地址或主机名称的技巧集锦。在 Win32 API编程中你可以使用NetWork API&#xff0c;在.NET平台中也是类似的。唯一的不同之处是你要找到并理解为完成这个任务需…

让浏览器开挂的插件,测评师教你如何选

CSDN下起了红包雨399 元智能音箱199 元天猫精灵300元现金红包/会员100元红包/会员更有千万流量曝光100%有奖......作为日常总发现 " 宝藏 " 的你总体验过一些 " 王炸 " 级别的chrome插件让你想 “ 真诚 ” 安利所以&#xff0c;CSDN开启了彩虹屁chrome插件…

JQuery:JQuery 中的CSS()方法

JQuery:CSS()方法jQuery css()方法&#xff1a;css()方法设置或返回被选元素的一个或多个样式属性。1、返回 CSS 属性如需返回指定的 CSS 属性的值&#xff0c;请使用如下语法&#xff1a;css("propertyname");下面的例子将返回首个匹配元素的 background-color 值&a…

j.u.c.locks.AbstractQueuedSynchronizer.Node

2019独角兽企业重金招聘Python工程师标准>>> AQS是JUC当中最核心的部分&#xff0c;大部分多线程讲解&#xff0c;都不会详细讲AQS&#xff0c;AQS的源代码&#xff0c;要看明白还是有点困难的。但是一旦看明白了&#xff0c;结构还是蛮清晰的。这里我们把AQS拆开&a…

使用C#开发COM+组件

一般来说&#xff0c;在IT技术界以及硬件产业&#xff0c;技术的更新换代速度非常得惊人&#xff0c;而惯例是所有的新技术都会遵循向下兼容的原则&#xff0c;但是.NET技术不仅仅做到了这一点&#xff0c;.NET甚至实现了相互之间的各自调用&#xff0c;这一点是非常难能可贵的…

香奈儿的 AI 实验室里,发生了什么?

作者 | 库珀来源 | 数据实战派头图 | 下载于ICphotoAI 已经能够在给你播报今日天气时提供穿衣建议。相信你大多数情况下都听进去了。如果它给你提供美妆建议呢&#xff1f;包括香奈儿在内&#xff0c;越来越多的美容品牌正在将 AI 技术结合到其产品之中。可是&#xff0c;人工智…

VS code for python开发利器

转发点赞支持引言最近在整理python自动化测试课程的内容&#xff0c;发现了微软出的vs code编辑器太牛逼了&#xff0c;非常好用&#xff0c;而且轻量的不要不要的&#xff0c;特此记录下&#xff0c;有选择纠结症的朋友我强烈推荐使用ta。PS&#xff1a;兼容win10且兼容高分辨…

C#编码标准--命名约定和风格

命名约定和风格 1&#xff0e; 使用Pascal的命名规范命名类型和方法的名字。 public class SomeClass { public SomeMethod(){} } 2&#xff0e; 使用camel命名规范命名局部变量和方法的参数。 int number; void MyMethod(int someNumber) {} 3&#xff0e; 在命名接…

与AMD合并后,赛灵思与英特尔、英伟达在数据中心市场呈“三足鼎立”之势

被以350亿美元的价格收购后&#xff0c;全球独一家FPGA公司赛灵思归于芯片巨头AMD的麾下&#xff0c;正式成为AMD的一份子。如果英伟达收购ARM顺利进行&#xff0c;无疑将让半导体行业格局再次发生巨变。 赛灵思为什么会选择归于AMD旗下&#xff1f;成为AMD的一份子之后&#…

Android -- Fragment注意事项

ViewPagerFragment 让Fragment成为ViewPager的一页时&#xff0c;FragmentManager会一直保存管理创建好了的Fragment&#xff0c;即使当前不是显示的这一页&#xff0c;Fragment对象也不会被销毁&#xff0c;…

C#编码标准--编码习惯

1. 避免将多个类放在一个文件里面。 2. 一个文件应该只有一个命名空间&#xff0c;避免将多个命名空间放在同一个文件里面。 3. 一个文件最好不要超过500行的代码&#xff08;不包括机器产生的代码&#xff09;。 4. 一个方法的代码长度最好不要超过25行。 5. 避免方法中有超过…

官宣!《新程序员·开发者黄金十年》正式发布

“在互联网还不发达的时代&#xff0c;就是《程序员》伴我成长的。”“怀念啊&#xff0c;曾经《程序员》的日子。”“我是看着《程序员》长大的&#xff0c;大二时买了创刊号。”“这可是我们这一代人大学时候满满的回忆&#xff0c;也是当时寝室中传阅最多的书。”“每年的《…

java笔记(一)

2019独角兽企业重金招聘Python工程师标准>>> java数组是静态的&#xff0c;即数组被初始化后&#xff0c;其所占内存空间、数组长度是不可变的。初始化数组有静态初始化和动态初始化两种&#xff1a; public class ArrayTest {//以下是数组的两种静态初始化String[]…