标签: stdio

使用C在文本文件中返回随机行的最佳方法是什么?

使用C在文本文件中返回随机行的最佳方法是什么?它必须使用标准I/O库(<stdio.h>),因为它适用于Nintendo DS自制程序.

澄清:

  • 使用文件中的标题来存储行数不适用于我想要做的事情.
  • 我希望它尽可能随机(如果每条线具有被选为每隔一条线的相同概率,则最好.)
  • 程序运行时,该文件永远不会更改.(这是DS,所以没有多任务处理.)

c random file stdio

14
推荐指数
3
解决办法
1万
查看次数

popen隐式声明,即使添加了#include <stdio.h>

这是我的代码的一小部分.

   #include <stdio.h>
   #include <unistd.h>
   #include <stdlib.h>
   #include <time.h>
   #include <sys/stat.h>
   #include <sys/wait.h>
   #include <sys/types.h>
   #include <string.h>
   #include <sys/types.h>
   #include <sys/socket.h>
   #include <netinet/in.h>
   #include <arpa/inet.h>
    ...

   FILE * pipe;
    ...

   pipe = popen ("ls /tmp -1", "r");
    ...
   pclose(pipe);
Run Code Online (Sandbox Code Playgroud)
blarg.c:106: warning: implicit declaration of function ‘popen’

blarg.c:106: warning: assignment makes pointer from integer without a cast

blarg.c:112: warning: implicit declaration of function ‘pclose’

blarg.c:118: warning: assignment makes pointer from integer without a cast
Run Code Online (Sandbox Code Playgroud)

我真的不确定.我查了一下popen,它需要的是stdio.h.缺少什么,或者是我的其余代码中的问题(我真的不想显示更多的代码,因为它是一个赋值).

c declaration pipe stdio implicit

14
推荐指数
2
解决办法
8615
查看次数

Java:如何中止从System.in读取的线程

我有一个Java线程:

class MyThread extends Thread {
  @Override
  public void run() {
    BufferedReader stdin =
        new BufferedReader(new InputStreamReader(System.in));
    String msg;
    try {
      while ((msg = stdin.readLine()) != null) {
        System.out.println("Got: " + msg);
      }
      System.out.println("Aborted.");
    } catch (IOException ex) {
      ex.printStackTrace();
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

}

在另一个线程中,如何stdin.readline()在此线程中中止调用,以便打印此线程Aborted.?我试过了System.in.close(),但这没有任何区别,stdin.readline()仍然是阻塞.

我对没有的解决方案感兴趣

  • 忙等待(因为这会烧掉100%的CPU);
  • 睡觉(因为那时程序没有立即响应System.in).

java stdio

14
推荐指数
2
解决办法
9422
查看次数

fputc vs putc in C

我正在阅读Kernighan的C编程书,并且遇到了这个问题.两者之间的差异或他们各自的使用标准.我在StackOverflow上发现了一些处理此问题的帖子.我得到了答案的一部分,但理解它们有点麻烦.

正如他们在这里提到的(putc需要stdout,vs puts):

  1. 根据Kernighan的书,putc它相当于fputcputc可以作为宏实现,并且putc可以不止一次地评估它的流参数.

  2. putc和之间的区别fputc是,通过使用putc,您冒着运行本质上不安全的宏版本的风险,因为它可能不得不多次评估其流参数.这导致大多数人不知道并且因此不注意的并发症,因此fputc更好地使用.fputc的宏没有这个问题.

问题:

  1. putc可以作为一个宏实现但是同样的问题是什么fputc

  2. 第二个声明提到了一些并发症和安全问题.那些是什么?

  3. putc不止一次地评估它的论点.那么与评估论证相比,它带来了哪些优点或缺点.

c stdio

14
推荐指数
1
解决办法
8641
查看次数

Win32 - 从超时读取stdin

我正在尝试做一些我认为应该简单的事情:从标准输入执行阻塞读取,但如果没有可用数据,则在指定的时间间隔后超时.

在Unix世界中,这很简单,select()但在Windows中不起作用,因为stdin它不是套接字.如果没有创建额外的线程等,下一个最简单的选择是什么?

我正在使用针对Win32环境的visual C++.

到目前为止我尝试过:

  1. 使用select(如果输入不是套接字则不起作用)

  2. 使用WaitForSingleObject(GetStdHandle(STD_INPUT_HANDLE)). - 雷米的第一个建议.如果标准输入是控制台(其他人报告了同样的问题),当你调用它时,它总是会立即返回

  3. 使用重叠IO并执行WaitForSingleObject(Remy的第三个建议).在这种情况下,当输入来自控制台时,读取似乎总是阻塞 - 似乎stdin不支持异步I/O.

目前我认为我唯一剩下的选择是创建一个线程,它将执行阻塞读取然后发出事件信号,然后让另一个线程等待事件超时.

c c++ winapi stdio

14
推荐指数
3
解决办法
1万
查看次数

Visual Studio 15 __imp___iob,__ imp___pctype,__ imp___mb_cur_max

我正在尝试使用在visual studio中使用mingw编译的库.但是,我收到以下链接器错误:

错误LNK2001:未解析的外部符号__imp___iob

错误LNK2019:函数中引用了未解析的外部符号__imp___pctype

错误LNK2019:函数中引用了未解析的外部符号__imp____mb_cur_max

错误LNK2001:未解析的外部符号_fprintf

我能够通过链接与legacy_stdio_definitions.lib来修复_fprintf错误,如下所示:未解析的外部符号__imp__fprintf和__imp____iob_func,SDL2.

但是,我不知道如何解决其他三个未解决的外部问题.我怎样才能解决这个问题?这些库在Visual Studio 2013下完美运行.

编辑:

好的,这是一个更新.我将libmsvcrt.a从mingw lib文件夹移动到Visual Studio中,然后将其添加到链接器设置中.现在它似乎正常工作.

c++ legacy linker stdio visual-studio-2015

13
推荐指数
1
解决办法
1万
查看次数

C中的字符串流

print2fp(const void *buffer, size_t size, FILE *stream) {

 if(fwrite(buffer, 1, size, stream) != size)
  return -1;

 return 0;
}
Run Code Online (Sandbox Code Playgroud)

如何将数据写入字符串流而不是文件流?

c string stdio stream

12
推荐指数
2
解决办法
2万
查看次数

在哪里可以找到struct _IO_FILE

我正在查看/usr/include/stdio.h

碰巧遇到了下面这段代码.

/* Standard streams.  */

extern struct _IO_FILE *stdin;          /* Standard input stream.  */
extern struct _IO_FILE *stdout;         /* Standard output stream.  */
extern struct _IO_FILE *stderr;         /* Standard error output stream.  */
/* C89/C99 say they're macros.  Make them happy.  */
#define stdin stdin
#define stdout stdout
#define stderr stderr
Run Code Online (Sandbox Code Playgroud)

我的问题是,这个结构struct _IO_FILE声明在哪里,我想看看布局.以及代码提到

#define stdin stdin
Run Code Online (Sandbox Code Playgroud)

这应该怎么样?

c stdio

12
推荐指数
1
解决办法
8926
查看次数

stdio vs iostream

当我在互联网上搜索了这两个库之间的区别,大家都说<iostream>是标准我的C/O库++和<cstdio>是C.我的教授说,cin>>cout<<没有很好的功能,如果我们使用cin>>很多次我们的应用程序绝对会崩溃.他还表示,stdio输入和输出的速度提高了近3倍iostream.但是,我更喜欢使用iostream因为它更方便,而且我也不知道我的教授是否正确.

那么你建议我用什么?

c++ io iostream stdio

12
推荐指数
2
解决办法
2万
查看次数

C fgets与fgetc的阅读线

我需要读取一行文本(由换行符终止),而不对长度做出假设.所以我现在面对各种可能性:

  • fgets每次使用并检查最后一个字符是否为换行符并连续附加到缓冲区
  • 使用fgetc偶尔realloc使用缓冲区读取每个字符

Intuition告诉我fgetc变体可能会变慢,但是我再也看不出如何fgets在不检查每个角色的情况下做到这一点(我的直觉也不总是那么好).线条非常大,因此性能很重要.

我想知道每种方法的优缺点.先感谢您.

c io stdio fgets fgetc

11
推荐指数
1
解决办法
1万
查看次数

标签 统计

stdio ×10

c ×7

c++ ×3

io ×2

declaration ×1

fgetc ×1

fgets ×1

file ×1

implicit ×1

iostream ×1

java ×1

legacy ×1

linker ×1

pipe ×1

random ×1

stream ×1

string ×1

visual-studio-2015 ×1

winapi ×1