读书人

main函数怎么获得重定向参数

发布时间: 2012-08-29 08:40:14 作者: rapoo

main函数如何获得重定向参数
自己编写了一个more,计算百分比时。重定向后的参数不会获得。
./mymore <mymore.c

提问:C如何获得重定向后的参数?

[解决办法]
这个获得起来就比较曲折了, 如果是 windows, 可以这样:

C/C++ code
#include <locale.h>#include <stdio.h>#include <Windows.h>#include <io.h>typedef long NTSTATUS;#define NT_SUCCESS(Status) ((NTSTATUS)(Status) >= 0)typedef struct _IO_STATUS_BLOCK{    union    {        NTSTATUS Status;        PVOID    Pointer;    };    ULONG_PTR Information;} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;typedef struct _OBJECT_NAME_INFORMATION{    ULONG FileNameLength;    WCHAR FileName[1];} OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;typedef NTSTATUS (NTAPI *NTQUERYINFORMATIONFILE)(    IN  HANDLE                 FileHandle,    OUT PIO_STATUS_BLOCK       IoStatusBlock,    OUT PVOID                  FileInformation,    IN  DWORD                  Length,    IN  int FileInformationClass    );NTQUERYINFORMATIONFILE NtQueryInformationFile = NULL;int main(int argc, char* argv[]){    setlocale(0, "chs");    NTSTATUS status = -1;    HMODULE hNtdll = NULL;    HANDLE hFile = INVALID_HANDLE_VALUE;    IO_STATUS_BLOCK IoStatus = {0};    POBJECT_NAME_INFORMATION pfni = NULL;    size_t allocSize = 0;    hNtdll = LoadLibrary("ntdll.dll");    NtQueryInformationFile = (NTQUERYINFORMATIONFILE)GetProcAddress(hNtdll, "NtQueryInformationFile");    hFile = (HANDLE)_get_osfhandle(fileno(stdin));    if (hFile != INVALID_HANDLE_VALUE)    {        allocSize = sizeof(OBJECT_NAME_INFORMATION) + MAX_PATH * sizeof(WCHAR);        pfni = (POBJECT_NAME_INFORMATION)malloc(allocSize);        if (pfni != NULL)        {            RtlZeroMemory(pfni, allocSize);            status = NtQueryInformationFile(hFile, &IoStatus, pfni, allocSize, 9);            if (NT_SUCCESS(status))                wprintf(L"文件名: %s\n", pfni->FileName);            free(pfni);        }        CloseHandle(hFile);    }    FreeLibrary(hNtdll);} 

读书人网 >C语言

热点推荐