小编LPs*_*LPs的帖子

接收重复推送通知ios9

我在iOS9中收到两次相同的推送通知,虽然它在iOS8中工作正常.

我使用以下代码注册推送通知:

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000

if ([application respondsToSelector:@selector(registerUserNotificationSettings:)])
{
    // use registerUserNotificationSettings
    UIUserNotificationSettings *setting = [UIUserNotificationSettings settingsForTypes:( UIUserNotificationTypeSound | UIUserNotificationTypeAlert|UIUserNotificationTypeBadge) categories:nil];
    [[UIApplication sharedApplication] registerUserNotificationSettings:setting];
    [[UIApplication sharedApplication] registerForRemoteNotifications];
}
else
{
    // use registerForRemoteNotifications
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert |UIRemoteNotificationTypeBadge)];
}

#else

// use registerForRemoteNotifications
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];

#endif
Run Code Online (Sandbox Code Playgroud)

iphone objective-c apple-push-notifications ios

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

从C中的缓冲区运行程序集.exe

我正在从事与沙盒技术相关的项目.

目前我正在编写一个从远程Web服务器获取小型汇编.exe二进制文件的C程序(.NET).这个二进制文件存储在内存中(从不触摸磁盘),我的目的是从内存中运行这个二进制文件.如果我的客户端是.NET我的,那么从内存中运行该程序集就没有问题(事实上,有很多不同的方法可以获得这个),但当然这是不可能的C(不完全确定).

我的问题是:在程序.exe的地址空间中进行汇编C,有没有办法从那里运行它?有没有办法让它CLR运行呢?起初我想调用powershell从那里运行它(使用Reflection.Assembly),但这种情况涉及将程序集写入磁盘.

无论如何,毫无疑问,最好和最有效的方法是使用.NET客户端.

.net c powershell

17
推荐指数
1
解决办法
853
查看次数

C11标准文档

从这个受SO保护的问题开始,我试图了解这些文件之间的区别:

  1. 9899 2012年费用$60
  2. 9899 2011年费用$265

正如你所看到的那些文件的价格差别很大,我不知道更便宜的文件是否有效,或者类似于真实标准的草稿或剪切副本.

有人买过INCITS吗?


编辑

正如@Chqrlie指出的那样:免费提供的ANSI和ISO官方文件与最终草案之间的区别是什么,可从官方网站 open-std.org/jtc1/sc22/wg14/www/docs/n1570 免费获取. PDF格式

c standards ansi c11

10
推荐指数
1
解决办法
1301
查看次数

即使提供了NULL参数,C标准time()函数线程也是安全的吗?

看起来有点像一个愚蠢的问题,但它让我思考......

根据这里,time要求在兼容系统上是线程安全的,对吗?无论函数的参数如何,此要求都成立.如果提供了NULL参数,则列出的一些函数不需要是线程安全的,并且time不包括在内.

所以看起来任何POSIX符合要求的系统都应该有一个线程安全的实现time.

但是,POSIX系统是否可以选择time_t在实际上使其成为指针且仍然符合要求的情况下实现?因此,如果提供一个NULL参数来存储结果,那么它的线程安全上的所有下注都不会被关闭,因为它可能会返回指向某个静态存储的指针吗?或者是否有一些time_t我在这方面缺少的要求或约定?

我如何最好地验证time在几个UNIX平台上是否是线程安全的?特别是AIX,HP-UX,Linux,和Solaris.在调试器中单步执行反汇编可能会有效,但实现可能会更改.

c multithreading posix

7
推荐指数
1
解决办法
1488
查看次数

修改Beaglebone Black的设备树

我使用Yocto为Beaglebone Black创建一个小的linux映像.我想我的大部分工作都像我想要的那样,除了我需要访问UART 2和4.当我使用标准的Debian图像时,我用设备树覆盖和capemgr做了这个.但是,我发现使用Yocto构建的内核没有capemgr.

我的选择似乎是:

  1. 用capemgr来构建内核,或者
  2. 使用必要的更改修改设备树文件.

选项2似乎更容易.

UART的设备树覆盖在这里这里.我已经尝试过以某种方式包含这些内容.

  1. 我反编译了我一直使用的设备树blob,并尝试从那里包含这些文件.
  2. 我下载了完整的dts文件集,并尝试在am335x-boneblack.dts中包含UART设备树覆盖.

这两种方法都会产生如下错误:

Error: am335x-boneblack.dts:1.1-2 syntax error
FATAL ERROR: Unable to parse input tree
Run Code Online (Sandbox Code Playgroud)

但是,我注意到在尝试编译am335x-boneblack.dts时我得到了类似的错误,即使没有修改它,所以我可能甚至没有做到这一点.(使用命令dtc -I dts -O dtb -o result.dtb am335x-boneblack.dts)

显然我不知道我在做什么.我怀疑设备树覆盖必须以某种方式进行修改,以便在我尝试使用它们的方式中使用.或者也许我没有做包含权限(只需在文件顶部添加#include).

有没有人有任何想法我可能做错了什么?我正在努力做甚么可能吗?

linux embedded linux-kernel device-tree beagleboneblack

6
推荐指数
1
解决办法
2117
查看次数

JNI GetByteArrayElements () 错误

我是 JNI 的新手,所以我对 JNI 和英语都不熟悉。

我的JNI项目是一个简单的文件读写。在 Java 中读取文件并将字节数组传递给 C API,然后使用 C 将其写入文件。

我的源代码:

Java代码是:

public class FileIO {
   static {
      System.loadLibrary("FileIO");         
   }

   private native void writeFile(byte[] msg);

   public static void main(String[] args) throws IOException { 

      byte[] array = Files.readAllBytes(new File("PtFBWCTn.mp3").toPath());

      // System.out.println(array.length);
      new FileIO(). writeFile(array); 
   }
}
Run Code Online (Sandbox Code Playgroud)

C代码:

#include <jni.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#include "HelloJNI.h"

JNIEXPORT void JNICALL Java_FileIO_ writeFile (JNIEnv *env, jobject job, jbyteArray array ){

    jsize num_bytes = (*env)->GetArrayLength(env, array);
    printf("Byte length : %d\n" , …
Run Code Online (Sandbox Code Playgroud)

c java java-native-interface c-strings

6
推荐指数
1
解决办法
8412
查看次数

使用 -pthread 如何不违反 ODR 规则?

我最近通过 CFFI 进行了 Python 扩展/包构建,它使用pthread_atfork(和 pthread 互斥锁)但不与 pthread 链接,即既不指定-pthread也不指定-lpthread,因此在具有由 libpthread 链接的静态部分的系统上失败由于缺少符号,链接脚本(而不是纯粹的共享库)。

在考虑正确的修复时,我在编译时偶然发现了-pthread 和 -lpthread 之间差异。因此,-pthread在编译和链接步骤中使用不仅放置-lpthread在正确的位置(在上述设置中至关重要),而且还定义了改变函数定义的预处理器符号。

(第三方)函数的一个例子是boost::datetime::c_time::localtime(...)调用localtime_rstd::localtime

这不是(很可能)违反 ODR 的来源吗?因此,例如编译一个根本不使用线程的简单静态库,-pthread并将其链接到一个使用线程的二进制文件中,因此正在使用-pthread将导致此类函数的不同定义并且是 UB(/IB?)?

然而从我/usr/include/features.h看来

   _REENTRANT, _THREAD_SAFE
      Obsolete; equivalent to _POSIX_C_SOURCE=199506L.
Run Code Online (Sandbox Code Playgroud)

所以问题:

  1. 是否存在/是否由于 ODR 违规-pthread,如果是,为什么(不是避免/故意/疏忽)?
  2. 这些定义不再相关了吗?所以-pthread现在相当于-lpthread(保存展示位置)?
  3. 应该使用什么来构建 Python 的 CFFI 扩展?使用-pthread是困难的,因为编译器相关的命名(-pthread, -pthreads, -mthreads...)

c c++ pthreads one-definition-rule

5
推荐指数
1
解决办法
95
查看次数

为什么我可以写一个已分配0空间的内存?

为什么我将大小为0的空间分配给数组但我仍然可以写入那段内存?

#include<stdio.h>

int main(int argc, char** argv)
{
   int * array = malloc((sizeof(int)) * 0);
   int i;
   for(i = 0; i < 10; i++)
      array[i] = i;

   for(i = 0; i < 10; i++)
      printf("%d ", array[i]);
}
Run Code Online (Sandbox Code Playgroud)

c

4
推荐指数
1
解决办法
152
查看次数

自动调整数组大小,通过自动计数初始化?

所以.我正在向一些大学水平的学生教授编程1.我特意告诉他们出去网上寻找参考资料,特别是我目前正在报道的数据结构部分.今天有一位学生通过电子邮件向我发送了一个指向tutorialspoint.com的链接,并询问了他从那里提取的这段代码:

#include <stdio.h>

main() {
   int LA[] = {1,3,5,7,8};
   int item = 10, k = 3, n = 5;
   int i = 0, j = n;

   printf("The original array elements are :\n");

   for(i = 0; i<n; i++) {
      printf("LA[%d] = %d \n", i, LA[i]);
   }

   n = n + 1;

   while( j >= k) {
      LA[j+1] = LA[j];
      j = j - 1;
   }

   LA[k] = item;

    printf("The array elements after insertion :\n");

   for(i = 0; i<n; i++) {
      printf("LA[%d] …
Run Code Online (Sandbox Code Playgroud)

c arrays

4
推荐指数
1
解决办法
160
查看次数

printf 包装器

我在 Arduino 下编码,我想开发串行打印格式化功能,所以我试图使用sprintf未知大小的缓冲区。基本上,我们可以避免谈论 Arduino 及其串行输出,而是考虑将文本写入缓冲区,然后使用printf. 我试过这个:

#include <stdio.h>
#include <stdarg.h>

void printf0( const char* format, ... ) {
    va_list args;
    va_start(args, format);
    vprintf(format, args);
    va_end( args );
}

void printf1(const char* format,...) {
  va_list args;
  va_start(args, format);
  char buf[vsnprintf(NULL, 0, format, args)];
  sprintf(buf, format, args);
  printf(buf);
  va_end(args);
}

int main()
{
    printf0("Hello, %d!\n", 15);
    printf1("Hello, %d!\n", 15);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

printf0函数是我在这里找到的一个准确示例。我的尝试是 function printf1,它产生不可预测的数字。上述程序的示例输出是:

Hello, 15!
Hello, 860799736!
Run Code Online (Sandbox Code Playgroud)

c arduino

4
推荐指数
1
解决办法
1935
查看次数