0 0

怎么样在windows环境上编译,且能运行10

各位好:
  以下代码在linux上编译通过,我现在想让它在windows环境上编译并且能运行,能否指点我修改一下?
或者帮我看看win环境下有什么库能代替pwd.h和unistd.h实现.万分感谢!!!


/* 
 * jnohup.c
 * jnohup can be used to start JVM with specified user(no SIGHUP affection).
 * the $! retured will not be the daemon's process ID
 * The way to Compile it:
 *         gcc -s -o jnohup jnohup.c
 * If want to output debug information and debug the program:
 *         gcc -D -g -o jnohup jnohup.c
 */
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <pwd.h>
#include <unistd.h>
#include <signal.h>

#include <sys/types.h>

void Usage()
{
    printf("Usage: jnohup <username> <jvm> <java_method> [[[arg1] arg2] ... ]\n");
}


main(int argc, char * argv[])
{
    struct passwd *user_passwd = 0;
    pid_t unix_uid = 0;
    gid_t unix_gid = 0;
    char exec_file[256];

    if (getuid()) {
        Usage();
        printf("Please change to root before running javash!\n");
        exit(1);
    }

    if (argc < 3) {
        Usage();
        exit(2);
    }

    user_passwd = getpwnam(argv[1]);
    if ( (struct passwd *) 0 == user_passwd ) {
        Usage();
        printf("Please make sure that the user \"%s\" exists!\n", argv[1]);
        exit(3);
    }
    unix_uid = user_passwd->pw_uid;
    unix_gid = user_passwd->pw_gid;

#ifdef DEBUG
    printf("Change User to, %d:%d\n", unix_uid, unix_gid);
#endif

    if ( setgid(unix_gid) ) {
        printf("Change to unix user \"%s\" failure!\n", argv[1]);
        exit(4);
    }

    if ( setuid(unix_uid) ) {
        printf("Change to unix user \"%s\" failure!\n", argv[1]);
        exit(4);
    }

    
#ifdef DEBUG
    printf("After Change User, %d:%d\n", getuid(), getgid());
#endif

    strncpy(exec_file, argv[2], 256);
    argv = argv + 2;

#ifdef DEBUG
    printf("The command will be executed, arg=%s\n", argv[0]);
#endif

    signal(SIGHUP, SIG_IGN); /* ignore the SIGHUP signal */

    execvp(exec_file, argv);

    printf("Please make sure that \"%s\" is in PATH and  excutable!\n", exec_file);

}


   我在Cygwin下面编译成exe成功了,运行是需要cygwin.dll,拷贝这个dll文件到这个exe文件目录中,运行成功.
但是在程序里面调用后报"Please change to root before running javash!\n",我这里就有点不明白了:
  1.是不是linux程序通过Cygwin编译后,任何方法都能在win下面运行,比如getuid(),getpwnam()等?
  2.下面的linux方法对应win的方法是什么:getuid(),getpwnam(arg),setgid(unix_gid),setuid(unix_uid)
getuid(), getgid(),signal(SIGHUP, SIG_IGN),execvp(exec_file, argv);
C 
2008年9月27日 17:07

2个答案 按时间排序 按投票排序

0 0

是不是用标准c写,改动就不是很大!

2008年10月12日 20:17
0 0

windows的用户机制和linux的应该相差很远吧
如果需要windows的用户管理的话,用.net做可能会方便很多的,用c做要自己调用一堆api,那个就费劲了...

2008年10月08日 12:40

相关推荐

    Windows环境下编译Opencpn

    在Windows环境下编译OpenCPN涉及到一系列的技术和工具,下面详细说明各个环节的知识点。 1. 获取OpenCPN源码: - 使用git clone命令可以获取OpenCPN的源码。通过指定一个分支(如beta31_stable)可以获取特定版本...

    Windows上ZLMediakit编译后可直接运行版本(带外置配置文件和运行可能所需dll依赖)

    在Windows环境中,配置文件通常为文本文件,如"Config.ini",可以通过文本编辑器进行编辑。 部署ZLMediaKit时,需要确保所有依赖的dll文件都在可执行文件的同一目录下,这样程序才能正常启动。同时,正确配置配置...

    cygwin 交叉编译的 coturn 服务器可以在windows 下运行

    在Windows环境下,你可能需要以管理员权限运行此脚本,因为coturn通常需要监听低编号的端口(如3478)。 7. **测试与调试** 你可以使用coturn自带的测试工具或其他第三方工具来验证服务器是否正常工作。例如,使用...

    ucos在windows下编译运行

    标题 "ucos在windows下编译运行" 描述了如何在Windows操作系统环境下,利用Visual Studio 2010(VS2010)对实时操作系统(RTOS)uC/OS-II进行编译和运行。这个过程涉及到嵌入式系统开发、操作系统移植、编译工具链的...

    Lua的windows编译运行环境

    **Lua在Windows下的编译与运行环境** Lua是一种轻量级的脚本语言,它以其简洁的语法、高效性能和易于嵌入其他系统的特点而受到广泛欢迎。在Windows平台上搭建Lua的开发和运行环境并不复杂,主要依赖于几个关键组件...

    在WINDOWS 平台上编译openoffice

    通过以上详细的知识点梳理,我们不仅了解了在Windows平台上编译OpenOffice的基本流程,还掌握了如何准备环境、配置参数、优化构建过程等关键技能。这对于任何希望在Windows系统上构建OpenOffice的人来说都是非常有...

    在Windows环境下编译系统应用源码

    在Windows环境下编译系统应用源码是一个涉及到多个步骤和技术的过程,尤其当涉及到系统签名机制时,需要确保编译出的应用程序能够安全、可靠地运行在操作系统上。以下是一些关键的知识点: 1. **编译环境搭建**:...

    windows下编译postgresql源码编译环境搭建

    了解并掌握在Windows环境下编译PostgreSQL源码是一项重要的技能,这不仅可以帮助你更好地理解和调试系统,而且可以让你在没有预编译包可用的情况下也能顺利使用PostgreSQL。通过实践和学习,你可以熟练地完成这一...

    windows环境下openocd编译

    在Windows环境下编译OpenOCD(Open On-Chip Debugger)是一项技术性的工作,涉及到源代码管理、编译工具链和交叉编译等概念。OpenOCD是一个开源的调试工具,主要用于嵌入式系统,它支持多种微控制器和FPGA设备的JTAG...

    交叉编译qt库并在树莓派上运行qt程序

    首先,我们理解交叉编译的概念:交叉编译是指在一个平台上生成另一个平台的可执行代码,例如在Windows环境下编译出适用于树莓派(基于ARM架构的Linux系统)的程序。 1. **Qt环境搭建**:在Windows环境下,通常使用...

    【QGIS跨平台编译】之【exiv2跨平台编译】:Windows环境下编译成果(支撑QGIS跨平台编译,以及二次研发)

    既可以支撑QGIS在Windows环境下的编译工作,也可以进行exiv2的二次研发。 四、其他说明 在Windows环境下,基于Qt Creator进行编译的exiv2开源库。包含有头文件include、库文件lib、动态库dll等,提供了Debug、...

    libevent-2.0.22-stable在windows环境下使用mingw编译

    标题"libevent-2.0.22-stable在windows环境下使用mingw编译"指的是一个关于使用MinGW编译工具在Windows操作系统上构建libevent库的2.0.22稳定版本的过程。libevent是一个开源的、跨平台的事件通知库,它提供了一种...

    windows上webkit的编译过程.pdf

    其次,我们需要安装 Cygwin,这是一个 Unix 模拟环境,可以模拟 Unix 环境在 Windows 上运行。我们可以从 WebKit 官网下载 cygwin-downloader.zip,并解压缩后运行 cygwin-downloader.exe,以下载和安装所需的软件包...

    windows下编译FreeRDP.zip

    在Windows环境下编译FreeRDP是一项对初学者来说可能颇具挑战性的任务,因为涉及到许多步骤和技术细节。FreeRDP是一个开源的远程桌面协议(RDP)客户端,它允许用户通过命令行或其他应用程序接口与远程Windows系统进行...

    libtorrent源码(windows编译使用)

    描述中提到“网上大部分libtorrent源码只能在Linux上编译”,这表明在开源社区中,libtorrent的源代码通常是为Linux系统设计和优化的,可能由于依赖于特定的Linux工具链或者构建系统,导致在Windows环境下编译存在...

    windows下编译u-boot代码

    ### 在Windows环境下使用MSYS与MinGW编译U-Boot代码 #### 一、搭建MSYS与MinGW环境 在Windows环境下编译U-Boot,首先需要安装MSYS与MinGW来提供必要的编译工具链。 **1. MSYS与MinGW** - **MSYS**(Minimal ...

    【QGIS跨平台编译】之【lzma跨平台编译】:Windows环境下编译成果(支撑QGIS跨平台编译,以及二次研发)

    既可以支撑QGIS在Windows环境下的编译工作,也可以进行lzma的二次研发。 四、其他说明 在Windows环境下,基于Qt Creator进行编译的lzma开源库。包含有头文件include、库文件lib、动态库dll等,提供了Debug、Release...

    Windows编译的MNN1.2.0

    **Windows环境下编译MNN1.2.0详解** MNN,全称为MindSpore Native Neural Network,是由阿里云开发的一款高效、轻量级的深度学习推理框架。它旨在为移动设备、嵌入式硬件以及服务器等不同平台提供高性能的模型运行...

    【QGIS跨平台编译】之【libzstd跨平台编译】:Windows环境下编译成果(支撑QGIS跨平台编译,以及二次研发)

    既可以支撑QGIS在Windows环境下的编译工作,也可以进行libzstd的二次研发。 四、其他说明 在Windows环境下,基于Qt Creator进行编译的libzstd开源库。包含有头文件include、库文件lib、动态库dll等,提供了Debug、...

Global site tag (gtag.js) - Google Analytics